2009-12-16 5 views

Antwort

56

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

Die folgenden Umgebungsvariablen Teil des CGI-Standard, mit besonderem Verhalten in App Engine sind: SERVER_SOFTWARE:

Im Entwicklungs-Webserver, dieser Wert " Development/X.Y "where" X.Y "ist die Version der Laufzeit.

Bei Ausführung mit App Engine ist dieser Wert "Google App Engine/X.Y.Z".

+2

Dank so etwas wie dies jetzt für mich funktioniert: import os def Entwicklung(): wenn os.environ [ 'SERVER_SOFTWARE'].find ('Entwicklung') == 0: Rückgabe True sonst: Rückgabe False – user132262

+0

Es hat meine Formatierung in den Kommentar gegessen, aber Sie wissen, was ich meine. Prost – user132262

+18

Simpler: os.environ ['SERVER_SOFTWARE']. Startswith ('Entwicklung') –

6

auf dem gleichen Trick Basierend, verwende ich diese Funktion in meinem Code:

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

ich meine /etc/hosts Datei um in der Lage angepasst haben, um die lokale Version für den Zugriff durch das Voranstellen eines „l“ zu mein Domainname, so ist es sehr einfach, von der lokalen zur Produktion überzugehen.

Beispiel:

  • Produktion url ist www.example.com
  • Entwicklung url ist www.lexample.com
+0

Ich bevorzuge 'w3' Subdomain für lokale. 'w3.example.com' und' www.example.com' – guneysus

3

Ich überprüfe nur die httplib (das ist ein Wrapper um appengine holen)

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

Dies scheint nicht mit 'testbed' lokalen Einheitstests zu funktionieren. –

+0

Ich wollte darauf hinweisen, dass 'appengine' nicht länger die Zeichenfolge ist, die von 'str (httplib.HTTP)' zurückgegeben wird, wenn sie sich in App Engine befindet. Der eigentliche String ist 'gae_override.httplib.HTTP'. Update-Test für 'return 'gae_override' in str (httplib.HTTP)' –

2

Eine allgemeinere Lösung
Eine allgemeine Lösung, die nicht bedeutet, auf einen Server von Google zu sein, stellt fest, ob der Code auf dem lokalen Computer ausgeführt wird. ich den Code unten unabhängig von dem Hosting-Server verwenden:

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

Django-Entwickler müssen setzen diesen Beispielcode in der settings.py Datei:

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

Wenn Sie macOS verwenden Sie einen allgemeineren Code schreiben könnten das Projekt.

EDIT:
Laut Jeff O'Neill in macOS High Sierra socket.gethostname() eine Zeichenfolge, die auf ".lan" zurückgibt.

+0

Für das neueste Mac OS X scheint nun das richtige Suffix ".lan" zu sein. –

+0

Interessant, ich gehe erst letzte Woche nach Sierra und 'socket.gethostname()' gibt eine Zeichenfolge zurück, die auf ".local" endet. Betreiben Sie High Sierra oder eine Server-Version von macOS? – ePi272314

+0

Ich habe gerade ein Upgrade auf High Sierra gemacht, also muss es so sein. –

Verwandte Themen