Verwenden des Google Cloud-Datenspeicheremulators mit dev_appserver

9

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:

  • Installiere die 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%
  • Führen Sie dev_appserver.py aus und navigieren Sie zu Ссылка , damit Sie durch die Datenspeicherdaten des Emulators navigieren können.

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).

    
Frank Wilson 26.07.2016, 09:08
quelle

2 Antworten

3

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!

    
djneely 04.08.2016 20:03
quelle
1

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?

    
Kai Wang 29.07.2016 00:17
quelle