Ich habe zwischen den Zeilen gelesen und versucht, dev_appserver.py mit dem neuen google Cloud-Datenspeicheremulator zu verknüpfen, der nicht älter ist.
Meine Hauptmotivation besteht darin, meine appengine-Projekte in meine Google Cloud-Datenfluss-Pipeline zu integrieren, während ich auf meinem lokalen Computer entwickle.
Dies ist das Verfahren zum Einrichten der Integration, soweit ich das verstanden habe:
googledatastore
Bibliothek mit pip (du musst möglicherweise ein Upgrade von six
mit easy_install erzwingen, besonders wenn du System Python El Capitan verwendest) Mit den Google Cloud-SDK-Tools können Sie den Google Cloud-Datenspeicher-Emulator ausführen:
%Vor%Im Terminal, auf dem dev_appserver den folgenden Befehl ausführt, um die Datenspeicher-Umgebungsvariablen zu setzen:
%Vor%Wenn die Projekt-ID in app.yaml nicht mit der aktuell ausgewählten Projekt-ID in den gcloud-Tools übereinstimmt, legen Sie die folgende Umgebungsvariable in derselben Shell fest:
%Vor%Allerdings funktioniert das nicht so reibungslos, wenn ich zu der URL navigiere, die ich bekomme:
%Vor% Das ist seltsam, denn wenn ich eine Python-Shell öffne und import googledatastore
führe, tritt kein Fehler auf.
Wenn ich ein bisschen tiefer graben und den Importcode in dev_appserver instrumentieren und den Fehler hier Ich erhalte folgenden Traceback:
%Vor% Ich habe auch kein Problem, google.datastore.v1beta3
in einer regulären Python-Shell zu importieren.
Noch seltsamer, wenn ich PYTHONINSPECT=x dev_appserver.py app.yaml
ausführen und in die Shell ablegen, die diese Importe ausführt, wird ohne Fehler ausgeführt. Vielleicht passiert etwas seltsames mit dem Python-Pfad, während dev_appserver.py gestartet wird?
Kann mir jemand sagen, wie ich dieses Feature funktioniere?
UPDATE: Ich reproduziert dieses Problem auf Ubuntu 14.04 (System Python 2.7.6, pip 8.1.2 über easy_install, gcloud-sdk 118.0.0, app-engine-python 1.9.38) sowie OS X (gcloud sdk 114.0.0, app-engine-python 1.9.38, Systempython 2.7.10).
Wir sind kürzlich auf dasselbe Problem gestoßen. Eine Sache zu betrachten ist die Ausgabe des Befehls:
%Vor%Das Problem, das wir hatten, war, dass der Emulator beim Ausführen des Emulators den Port 8607 wählte, aber die Methode env-init einen anderen Port 8328 zurückgab.
Also würde ich empfehlen, den Emulator zu starten und zu sehen, auf welchem Port er läuft:
%Vor%In diesem Fall 8607 und dann die Methode env-init auslösen, um die Syntax zu erhalten, aber den Port validieren. In unserem Fall mit dem obigen Server läuft der env-init 8328
zurück %Vor%Ändern Sie dies an den richtigen Port:
%Vor%Dann verwenden Sie dies, wo Ihr Projekt läuft und Sie sollten gut gehen. Das hat es für uns behoben. Hoffe das hilft!
Tatsächlich verweisen gcloud datastore emulator und dev_appserver auf zwei verschiedene Endpunkte. Der localhost: 8000 ist die Standardverwaltungskonsole von dev_appserver, während der Datenspeicheremulator über eine andere Konsolen-URL verfügt, die beim Start in Ausdrucken gefunden werden kann.
Ich nehme an, dass die Admin-Konsole, auf die Sie zugreifen, zu dev_appserver gehört, dann sollte das Problem innerhalb von dev_appserver liegen. Könnten Sie das Code-Snippet (falls vorhanden) mit dem Datenspeicher api in dev_appserver anhängen? BTW sollte gcloud.datastore
statt appengine.ext.(n)db
im Gespräch mit gcloud datastore-emulator sein.
Ich bin auch neugierig, was passieren würde, wenn Sie den Datenspeicher-Emulator nicht mit "--no-legacy" starten oder den Datenspeicher-Emulator nicht starten, sondern nur dev_appserver starten?
Tags und Links python google-app-engine google-cloud-platform google-cloud-datastore