Во время разработки я хочу обрабатывать некоторые вещи немного иначе, чем когда-либо, когда я в конечном итоге загружу серверы Google.
Есть ли быстрый тест, который я могу сделать, чтобы узнать, есть ли я в SDK или жить?
Во время разработки я хочу обрабатывать некоторые вещи немного иначе, чем когда-либо, когда я в конечном итоге загружу серверы Google.
Есть ли быстрый тест, который я могу сделать, чтобы узнать, есть ли я в SDK или жить?
Смотрите: https://cloud.google.com/appengine/docs/python/how-requests-are-handled#Python_The_environment
Следующие переменные среды являются частью стандарта CGI со специальным поведением в App Engine:
SERVER_SOFTWARE
:В веб-сервере разработки это значение равно "
Development/X.Y
", где "X.Y
" - это версия среды выполнения.При работе в App Engine это значение равно "
Google App Engine/X.Y.Z
".
Основываясь на том же трюке, я использую эту функцию в своем коде:
def isLocal():
return os.environ["SERVER_NAME"] in ("localhost", "www.lexample.com")
Я настроил свой файл /etc/hosts
, чтобы иметь доступ к локальной версии, добавив "l" к моему доменному имени, таким образом, очень легко перейти от локального к производству.
Пример:
www.example.com
www.lexample.com
Я просто проверяю httplib (который представляет собой обертку для извлечения appengine)
def _is_gae():
import httplib
return 'appengine' in str(httplib.HTTP)
Более общее решение
Более общее решение, которое не означает, что оно находится на сервере google, будет определять, выполняется ли код на вашей локальной машине.
Я использую код ниже независимо от сервера:
import socket
if socket.gethostname() == "your local computer name":
DEBUG = True
ALLOWED_HOSTS = ["127.0.0.1", "localhost", ]
...
else:
DEBUG = False
ALLOWED_HOSTS = [".your_site.com",]
...
Если вы находитесь в МАС, вы можете написать более общий код:
if socket.gethostname().endswith(".local"): # True in your local computer
...
Если вы разработчик Django, поместите этот образец кода в "settings.py" вашего проекта.
EDIT:
По словам Джеффа О'Нила, в macOS High Sierra socket.gethostname()
вернется строка, заканчивающаяся на ".lan"