Die Google Cloud CLI enthält einen lokalen Entwicklungsserver (dev_appserver.py
). Sie können den lokalen Entwicklungsserver verwenden, um die Ausführung Ihrer Anwendung in der App Engine-Produktionsumgebung zu simulieren oder auf gebündelte App Engine-Dienste zuzugreifen.
Die simulierte Umgebung erzwingt gewisse Sandbox-Einschränkungen, wie beispielsweise eingeschränkte Systemfunktionen und Python 2-Modulimporte, sie erzwingt aber keine Kontingente oder Zeitüberschreitungen für Anfragen.
Der lokale Entwicklungsserver simuliert außerdem die von den Bibliotheken im SDK für App Engine bereitgestellten Dienste, einschließlich Datenspeicher, Memcache und Aufgabenwarteschlangen. Hierzu werden die Aufgaben der Dienste vom Server lokal ausführt. Wenn die Anwendung auf dem Entwicklungsserver ausgeführt wird, können Sie weiterhin Remote API-Aufrufe über HTTP-Endpunkte von Google APIs an die Produktionsinfrastruktur senden.
Lokalen Entwicklungsserver ausführen
Nachdem Sie die Konfigurationsdatei app.yaml
für die Anwendung erstellt haben, können Sie mit dem Befehl dev_appserver.py
den lokalen Entwicklungsserver starten und die Anwendung lokal ausführen.
So starten Sie den lokalen Entwicklungsserver:
Lokalen Entwicklungsserver (dev_appserver.py
) ausführen
Der lokale Entwicklungsserver befindet sich unter [PATH_TO_CLOUD_SDK]/google-cloud-sdk/bin/dev_appserver.py
. Zum Ausführen des Tools können Sie entweder den vollständigen Pfad beim Ausführen von dev_appserver.py
angeben oder dev_appserver.py
zur Umgebungsvariable PATH
hinzufügen.
Wenn Sie die Tools der Google Cloud CLI Ihrem PATH
hinzufügen und die Befehlsvervollständigung aktivieren möchten, führen Sie den folgenden Befehl aus:
[PATH_TO_CLOUD_SDK]/google-cloud-sdk/install.sh
Führen Sie in dem Verzeichnis, das Ihre
app.yaml
-Konfigurationsdatei enthält, den Befehldev_appserver.py
aus. Wenn Python 2 nicht der Standard-Interpreter auf Ihrem System ist, müssen Siepython2 dev_appserver.py
ausführen, um sicherzustellen, dass der Python 2-Interpreter verwendet wird.Geben Sie den Verzeichnispfad zur Anwendung an. Beispiel:
dev_appserver.py [PATH_TO_YOUR_APP]
Alternativ können Sie die Konfigurationsdatei eines bestimmten Dienstes angeben. Beispiel:
dev_appserver.py app.yaml
Fügen Sie die Option
--port
ein, um den Port zu ändern:dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]
Funktioniert dev_appserver.py nicht?
Weitere Informationen zu
dev_appserver.py
-Befehlsoptionen finden Sie unter Optionen für lokalen Entwicklungsserver.Der lokale Entwicklungsserver wird jetzt ausgeführt und ist für Anfragen bereit. Rufen Sie http://localhost:8080/ in Ihrem Webbrowser auf, um die Anwendung in Aktion zu sehen.
Wenn Sie einen benutzerdefinierten Port mit der Option
--port
angegeben haben, müssen Sie den Port in Ihrem Browser öffnen.
Mit den folgenden Tastenkombinationen können Sie den lokalen Server über die Befehlszeile beenden:
- macOS oder Linux: Strg + C
- Windows: Strg + Pause
Anwendungs-IDs angeben
Zum Aufrufen der Anwendungs-ID auf dem lokalen Server, z. B. für das Spoofing einer E-Mail-Adresse, verwenden Sie die Funktion get_application_id()
. Den Hostnamen der ausgeführten Anwendung können Sie mit der Funktion get_default_version_hostname()
abrufen.
Laufzeitumgebung der Anwendung erkennen
Ermitteln Sie den Wert der Umgebungsvariable SERVER_SOFTWARE
, um zu prüfen, ob der Code in einer Produktionsumgebung oder auf dem lokalen Entwicklungsserver ausgeführt wird:
if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
# Production
else:
# Local development server
Lokalen Datenspeicher verwenden
Der lokale Entwicklungsserver simuliert den App Engine Datastore mithilfe einer lokalen Datei, die zwischen Aufrufen des lokalen Servers bestehen bleibt.
Weitere Informationen zu Indexen und index.yaml
finden Sie auf den Seiten Datenspeicherindexe und Konfiguration des Datenspeicherindex.
Lokalen Datenspeicher durchsuchen
Wenn die Anwendung mithilfe des lokalen Entwicklungsservers Daten in den lokalen Datenspeicher geschrieben hat, können Sie diese in der lokalen Entwicklungskonsole durchsuchen.
So durchsuchen Sie den lokalen Datenspeicher:
Rufen Sie in der lokalen Entwicklungskonsole den Datastore-Betrachter auf. Die URL lautet
http://localhost:8000/datastore
.Sehen Sie sich die Inhalte des lokalen Datenspeichers an.
ID-Zuordnungsrichtlinie angeben
Für die App Engine-Produktionsumgebung können Sie im Datenspeicher festlegen, dass Entitäts-IDs automatisch generiert werden.
Die Richtlinien für die automatische Zuweisung von IDs für den Produktionsserver unterscheiden sich zwar grundlegend von den Richtlinien für den Entwicklungsserver, doch Sie können auch hier die Richtlinie zur automatischen ID-Zuordnung für den lokalen Server angeben.
Verwenden Sie die Option --auto_id_policy
, um die Richtlinie für die automatische ID-Zuweisung anzugeben:
dev_appserver.py --auto_id_policy=sequential
Der Wert für --auto_id_policy
kann einer der folgenden sein:
scattered
: (Standardeinstellung) IDs werden aus einer sich nicht wiederholenden Sequenz von annähernd einheitlich verteilten Ganzzahlen zugewiesen.sequential
: IDs werden aus der Sequenz von aufeinanderfolgenden Ganzzahlen zugewiesen.
Lokalen Datenspeicher löschen
Wenn Sie den lokalen Datenspeicher für eine Anwendung löschen möchten, rufen Sie den lokalen Entwicklungsserver auf:
dev_appserver.py --clear_datastore=yes app.yaml
Standort des lokalen Datenspeichers ändern
Zum Ändern des für die Datenspeicherdatei verwendeten Standorts verwenden Sie die Option --datastore_path
:
dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml
Nutzerdienst verwenden
App Engine bietet einen Nutzerdienst, der die Authentifizierung und Autorisierung für Ihre Anwendung vereinfacht. Der lokale Entwicklungsserver simuliert das Verhalten von Google-Konten mit eigenen Anmelde- und Abmeldeseiten. Bei der Ausführung auf dem lokalen Entwicklungsserver geben die Funktionen users.create_login_url
und users.create_logout_url
URLs für /_ah/login
und /_ah/logout
auf dem lokalen Server zurück.
Mail-Dienst verwenden
Der lokale Entwicklungsserver kann einen SMTP-Server oder eine lokale Installation von Sendmail nutzen, um E-Mails für Aufrufe an den App Engine-E-Mail-Dienst zu senden.
SMTP verwenden
Zum Aktivieren der E-Mail-Unterstützung mit einem SMTP-Server rufen Sie dev_appserver.py
so auf:
dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
--smtp_user=ajohnson --smtp_password=k1tt3ns [PATH_TO_YOUR_APP]
Dabei geben Sie für die Optionen --smtp_host
, --smtp_port
, --smtp_user
und --smtp_password
eigene Werte an.
Sendmail verwenden
Zum Aktivieren der E-Mail-Unterstützung mit Sendmail rufen Sie dev_appserver.py
so auf:
dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]
Der lokale Server verwendet dann den Befehl sendmail
, um E-Mail-Nachrichten mit der Standardkonfiguration Ihrer Installation zu versenden.
URL Fetch verwenden
Wenn die Anwendung die URL Fetch API zum Erstellen einer HTTP-Anfrage verwendet, führt der lokale Entwicklungsserver die Anfrage direkt von Ihrem Computer aus. Das Verhalten von URL Fetch auf dem lokalen Server kann sich vom Verhalten in der App Engine-Produktionsumgebung unterscheiden, wenn Sie einen Proxyserver für den Zugriff auf Websites verwenden.
Interaktive Konsole nutzen
Mit der interaktiven Konsole können Entwickler beliebigen Python-Code in ein Webformular eingeben und in ihrer Anwendungsumgebung ausführen. Sie bietet denselben Zugriff auf die Umgebung und die Dienste der Anwendung wie eine .py-Datei in der Anwendung selbst.
So verwenden Sie die interaktive Konsole:
Rufen Sie die interaktive Konsole in der lokalen Entwicklungskonsole auf. Die URL lautet
http://localhost:8000/console
.Geben Sie beliebigen Python-Code ein, den Sie im Textbereich ausführen möchten, und senden Sie das Formular zur Ausführung. Der folgende Code fügt beispielsweise eine Datenspeicherentität namens
Greeting
mit dem Textinhalt vonHello
hinzu:from google.appengine.ext import ndb class Greeting(ndb.Model): content = ndb.TextProperty() e = Greeting(content="Hello") e.put()
Fehlerbehebung mit dem Python-Debugging
So verwenden Sie Python-Debugging (pdb
):
Fügen Sie Ihrem Code die folgende Zeile hinzu:
import pdb; pdb.set_trace();
dev_appserver
wird an dieser Stelle unterbrochen und in diepdb
-REPL (Read-Eval-Print-Loop) eingefügt, sodass Sie Ihren Code über die Befehlszeile debuggen können.Wenn Ihre Anwendung mehrere Anfragen gleichzeitig ausführt, die
pdb.set_trace()
aufrufen, werden mehrere Debugging-Sitzungen gleichzeitig gestartet, die jeweils eine Ausgabe anSTDOUT
senden. Sie können dies durch Serialisieren der Anfragen vermeiden. Dazu deaktivieren Sie für dendev_appserver
das Multi-Threading und Multi-Processing:Deaktivieren Sie das Multi-Threading mit folgenden Optionen:
- Für alle Dienste mit dem Flag
--threadsafe_override=false
- Für einen einzigen Dienst mit dem Flag
--threadsafe_override=<SERVICENAME>:false
- Für mehrere Dienste mit dem Flag
--threadsafe_override=<SERVICE1NAME>:false,<SERVICE2NAME>:false
- Für alle Dienste mit dem Flag
Deaktivieren Sie das Multi-Processing mit folgenden Optionen:
- Für alle Dienste mit dem Flag
--max_module_instances=1
- Für einen einzigen Dienst mit dem Flag
--max_module_instances=<SERVICENAME>:1
- Für mehrere Dienste mit dem Flag
--max_module_instances=<SERVICE1NAME>:1,<SERVICE2NAME>:1
- Für alle Dienste mit dem Flag