В Python, как я могу проверить, находится ли я в Google App Engine SDK? - PullRequest
39 голосов
/ 16 декабря 2009

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

Могу ли я провести быстрый тест, чтобы выяснить, нахожусь ли я в SDK или живу?

Ответы [ 4 ]

59 голосов
/ 16 декабря 2009

См .: 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".

6 голосов
/ 20 декабря 2009

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

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

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

Пример:

  • URL продукции www.example.com
  • URL-адрес разработки www.lexample.com
3 голосов
/ 28 апреля 2011

Я просто проверяю httplib (который является оберткой для appengine fetch)

def _is_gae():
   import httplib
   return 'appengine' in str(httplib.HTTP)
2 голосов
/ 07 мая 2016

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

Если вы используете macOS, вы можете написать более общий код:

if socket.gethostname().endswith(".local"): # True in your local computer
    ...

Разработчики Django должны поместить этот пример кода в файл settings.py проекта.

EDIT:
По словам Джеффа О'Нила в macOS, High Sierra socket.gethostname() возвращает строку, заканчивающуюся на «.lan».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...