Migrazione all'emulatore Cloud Datastore

L'emulatore Cloud Datastore fornisce l'emulazione locale dell'ambiente Datastore di produzione. Cloud Datastore Emullator è in fase di implementazione progressiva come implementazione predefinita di Datastore per dev_appserver.

Vantaggi della migrazione all'emulatore Datastore

L'emulatore Datastore può essere condiviso tra le librerie client dell'ambiente standard di App Engine come DB e NDB e le librerie client di Cloud Datastore.

Puoi utilizzare l'emulatore Datastore per condividere i dati locali tra i servizi in esecuzione nell'ambiente standard di App Engine e nell'ambiente flessibile di App Engine.

Prima di iniziare

  1. Scarica e installa il runtime Java (JRE) versione 8 o successiva.

  2. Esegui dev_appserver dalla directory google-cloud-sdk/bin.

Scelta dell'ambiente di emulazione

L'emulatore Cloud Datastore è l'emulatore predefinito per una parte degli utenti di dev_appserver. Se utilizzi l'emulatore Cloud Datastore, dev_appserver mostrerà:

... Using Cloud Datastore Emulator.

Puoi forzare dev_appserver a usare l'emulatore Cloud Datastore impostando il flag&'--support_datastore_emulator' su true all'avvio di dev_appserver:

dev_appserver.py --support_datastore_emulator=[true|false] app.yaml

Utilizzo di dev_appserver con l'emulatore Datastore

Dev_appserver decide se avviare l'emulatore in base alla variabile di ambiente DATASTORE_EMULATOR_HOST.

  • Quando esiste questa variabile di ambiente, dev_appserver comunica a un processo emulatore esistente in esecuzione su DATASTORE_EMULATOR_HOST.

  • Quando questa variabile di ambiente non esiste, dev_appserver avvia un nuovo processo emulatore. Puoi specificare la porta dell'emulatore Datastore impostando l'elemento --datastore_emulator_port all'avvio di dev_appserver.py.

Modifiche al funzionamento

Conversione in formato dati locale

Attualmente, l'emulatore Datastore locale archivia i dati in SQLlite3, mentre l'emulatore Cloud Datastore archivia i dati come oggetti Java.

Quando dev_appserver viene avviato con i datiqlite3 legacy, i dati vengono convertiti in oggetti Java. Il backup dei dati originali viene eseguito con il nome file {original-data-filename}.sqlitestub.

Posizione del file di dati locali

Il file di dati locale può essere specificato con il flag --datastore_path.

  • Quando dev_appserver avvia l'emulatore, la posizione rimane invariata.

  • Quando dev_appserver utilizza l'emulatore Cloud Datastore, questo flag verrà ignorato a favore dell'impostazione dell'emulatore.

Indice locale.yaml

  • Un file index.yaml vuoto verrà considerato non valido. La sintassi di index.yaml è il formato YAML. Il file index.yaml ha un singolo elemento di elenco chiamato indici.

  • Quando dev_appsever avvia l'emulatore, index.yaml rimarrà nella directory del progetto dell'applicazione.

  • Quando dev_appserver utilizza l'emulatore Cloud Datastore esistente, index.yaml verrà gestito da tale emulatore.

Altre funzionalità per il server datastore locale rimangono invariate.

Risolvere i problemi

Recupero dell'output emulatore

Per impostazione predefinita, dev_appserver esegue Datastore Emulator in modalità silenziosa. Per visualizzare l'output di Datastore Emulator, esegui dev_appserver con --dev_appserver_log_level=debug.

Non vengono importate gRPC

Il server dev_appserver utilizza gRPC per comunicare con l'emulatore Cloud Datastore. Il pacchetto dell'interfaccia a riga di comando gcloud gRPC, tuttavia, è incompatibile con alcuni sistemi operativi e ciò causa errori di importazione.

Per correggere gli errori di importazione, puoi installare gRPC separatamente utilizzando pip con l'interfaccia a riga di comando gcloud 219.0.0 o successiva:

pip install grpcio