Подтвердить что ты не робот

В Python, как я могу проверить, есть ли в Google App Engine SDK?

Во время разработки я хочу обрабатывать некоторые вещи немного иначе, чем когда-либо, когда я в конечном итоге загружу серверы Google.

Есть ли быстрый тест, который я могу сделать, чтобы узнать, есть ли я в SDK или жить?

4b9b3361

Ответ 1

Смотрите: 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".

Ответ 2

Основываясь на том же трюке, я использую эту функцию в своем коде:

def isLocal():
    return os.environ["SERVER_NAME"] in ("localhost", "www.lexample.com")

Я настроил свой файл /etc/hosts, чтобы иметь доступ к локальной версии, добавив "l" к моему доменному имени, таким образом, очень легко перейти от локального к производству.

Пример:

  • производственный адрес www.example.com
  • URL-адрес разработки www.lexample.com

Ответ 3

Я просто проверяю httplib (который представляет собой обертку для извлечения appengine)

def _is_gae():
   import httplib
   return 'appengine' in str(httplib.HTTP)

Ответ 4

Более общее решение
Более общее решение, которое не означает, что оно находится на сервере 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"