El emulador de Cloud Datastore proporciona una emulación local del entorno de producción de Datastore. El emulador de Cloud Datastore se está implementando progresivamente como la implementación predeterminada de Datastore para dev_appserver.
Ventajas de migrar al emulador de Datastore
El emulador de Datastore se puede compartir entre las bibliotecas de cliente del entorno estándar de App Engine, como DB y NDB, y las bibliotecas de cliente de Cloud Datastore.
Puedes usar el emulador de Datastore para compartir datos locales entre servicios que se ejecutan en el entorno estándar de App Engine y en el entorno flexible de App Engine.
Antes de empezar
Descarga e instala la versión 11 o una posterior del tiempo de ejecución de Java (JRE).
Ejecuta dev_appserver desde el directorio
google-cloud-sdk/bin
.
Elegir el entorno de emulación
El emulador de Cloud Datastore es el emulador predeterminado para una parte de los usuarios de dev_appserver. Si usas el emulador de Cloud Datastore, dev_appserver mostrará lo siguiente:
... Using Cloud Datastore Emulator.
Puedes obligar a dev_appserver a usar el emulador de Cloud Datastore definiendo el valor true en la marca --support_datastore_emulator
al iniciar dev_appserver.py
:
python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --support_datastore_emulator=[true|false] app.yaml
Sustituye DEVAPPSERVER_ROOT por la ruta a la carpeta en la que extraes la versión archivada de devapp_server.py
. Para obtener más información sobre cómo descargar y usar la versión archivada de dev_appserver.py
, consulta el artículo Utilizar el servidor de desarrollo local.
Usar dev_appserver con el emulador de Datastore
Dev_appserver decide si inicia el emulador en función de la variable de entorno DATASTORE_EMULATOR_HOST
.
Cuando existe esta variable de entorno, dev_appserver se comunica con un proceso de emulador que se está ejecutando en
DATASTORE_EMULATOR_HOST
.Si esta variable de entorno no existe, dev_appserver inicia un nuevo proceso de emulador. Puedes especificar el puerto del emulador de Datastore configurando
--datastore_emulator_port
al iniciar dev_appserver.py.
Cambios en el comportamiento
Conversión de formato de datos locales
Actualmente, el emulador de Datastore local almacena los datos en sqlite3, mientras que el emulador de Cloud Datastore los almacena como objetos Java.
Cuando se inicia dev_appserver con datos de sqlite3 antiguos, los datos se convierten en objetos Java. Los datos originales se guardan en una copia de seguridad con el nombre de archivo {original-data-filename}.sqlitestub.
Ubicación del archivo de datos local
El archivo de datos local se puede especificar con la marca --datastore_path
.
Cuando dev_appserver inicia el emulador, la ubicación no cambia.
Cuando dev_appserver usa el emulador de Cloud Datastore, esta marca se ignora en favor del ajuste del emulador.
index.yaml local
Un archivo index.yaml vacío se considerará no válido. La sintaxis de index.yaml es el formato YAML. El archivo index.yaml tiene un único elemento de lista llamado indexes.
Cuando dev_appserver inicie el emulador, index.yaml permanecerá en el directorio del proyecto de la aplicación.
Cuando dev_appserver usa el emulador de Cloud Datastore, index.yaml se gestiona mediante ese emulador.
El resto de las funciones del servidor del almacén de datos local no cambian.
Solución de problemas
Obtener la salida del emulador
De forma predeterminada, dev_appserver ejecuta el emulador de Datastore en modo Silencio. Para ver la salida del emulador de Datastore, ejecuta dev_appserver con --dev_appserver_log_level=debug
.
Fallo en las importaciones de gRPC
El servidor dev_appserver usa gRPC para comunicarse con el emulador de Cloud Datastore. La gcloud CLI empaqueta gRPC, pero la versión empaquetada no es compatible con algunos sistemas operativos, lo que provoca errores de importación.
Para solucionar los errores de importación, puedes instalar gRPC por separado con pip
con la CLI de gcloud 219.0.0 o una versión posterior:
pip install grpcio