En Python, Comment puis-je tester si je suis dans Google App Engine SDK?

en cours de développement, je veux gérer certaines choses légèrement différemment que lorsque je finirai par télécharger sur les serveurs Google.

y a-t-il un test rapide que je peux faire pour savoir si je suis dans le SDK ou en vie?

37
demandé sur Wooble 2009-12-16 21:14:30

4 réponses

voir: https://cloud.google.com/appengine/docs/python/how-requests-are-handled#Python_The_environment

les variables d'environnement suivantes font partie de la norme CGI, avec un comportement particulier dans App Engine: SERVER_SOFTWARE:

Dans le serveur web de développement, cette valeur est de "Development/X.Y" où "X.Y " est la version de l'exécution.

Lors de l'exécution sur App Engine, cette valeur est "Google App Engine/X.Y.Z".

57
répondu miku 2016-07-12 08:14:21

Basé sur le même truc, j'utilise cette fonction dans mon code:

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

j'ai personnalisé mon /etc/hosts fichier pour pouvoir accéder à la version locale en préparant un "l" à mon nom de domaine, il est donc très facile de passer du local à la production.

Exemple:

  • l'url de production est www.example.com
  • l'url de développement est www.lexample.com
6
répondu Emilien 2009-12-20 20:37:34

je viens de vérifier le httplib (qui est un wrapper autour de appengine fetch)

def _is_gae():
   import httplib
   return 'appengine' in str(httplib.HTTP)
3
répondu PanosJee 2011-04-28 09:17:35

une solution plus générale

Une solution plus générale, qui n'implique pas D'être sur un serveur Google, détecte si le code est en cours d'exécution sur votre machine locale. Je suis à l'aide du code ci-dessous quel que soit le serveur d'hébergement:

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",]
    ...

si vous utilisez macOS vous pouvez écrire un code plus générique:

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

les développeurs Django doivent mettre cet exemple de code dans le fichier settings.py du projet.

EDIT:

Selon Jeff O'Neill in macOS High Sierra socket.gethostname() renvoie une chaîne se terminant par ".LAN."

2
répondu ePi272314 2018-03-11 00:57:49