Utilizar el servidor de desarrollo local

El servidor de desarrollo local emula el entorno de tiempo de ejecución de Java de App Engine y todos sus servicios, incluido Datastore.

Antes de empezar

Como Java 8 ha llegado al final del ciclo de asistencia, ya no puedes usar la versión más reciente de dev_appserver.py para ejecutar tus aplicaciones de forma local. Para descargar una versión archivada de devapp_server.py, sigue estos pasos:

  1. En el archivo, descarga la carpeta comprimida que contiene el servidor dev_appserver.py para los tiempos de ejecución que han llegado al final del periodo de asistencia.

  2. Extrae el contenido del directorio en tu sistema de archivos local, por ejemplo, en el directorio /home. Puedes encontrar dev_appserver.py en el directorio google_appengine/google/appengine/tools/java/bin.

Ejecución del servidor web de desarrollo

Para obtener información sobre cómo definir las propiedades del sistema y las variables de entorno de tu aplicación, consulta Cómo se gestionan las solicitudes.

También puedes ejecutar el servidor web de desarrollo desde el símbolo del sistema. El comando que se debe ejecutar se encuentra en el directorio del SDK con la ruta relativa google_appengine/google/appengine/tools/java/bin.

Sintaxis de comandos de Windows:

google_appengine\google\appengine\tools\java\bin\java_dev_appserver.cmd [options] [WAR_DIRECTORY_LOCATION]

Sintaxis de comandos de Linux o macOS:

google_appengine/google/appengine/tools/java/bin/java_dev_appserver.sh [options] [WAR_DIRECTORY_LOCATION]

El comando toma la ubicación del directorio WAR de tu aplicación como argumento.

Detener el servidor de desarrollo

Para detener el servidor web, pulsa Ctrl-C.

Detectar el entorno de ejecución de la aplicación

Para determinar si tu código se está ejecutando en producción o en el servidor de desarrollo local, puedes consultar el valor del método SystemProperty.environment.value(). Por ejemplo:

if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
   // Production
 } else {
  // Local development server
  // which is: SystemProperty.Environment.Value.Development
}

Usar el emulador de Datastore local

El servidor web de desarrollo simula Datastore mediante un Datastore local respaldado por archivos en tu ordenador. El almacén de datos se llama local_db.bin y se crea en el directorio WAR de tu aplicación, en el directorio WEB-INF /appengine-generated/. No se sube con tu aplicación.

Datastore se mantiene entre las invocaciones del servidor web, por lo que los datos que almacenes seguirán estando disponibles la próxima vez que ejecutes el servidor web. Para borrar el contenido del almacén de datos, cierra el servidor y, a continuación, elimina este archivo.

Como se describe en Configuración de índices de Datastore, el servidor de desarrollo puede generar la configuración de los índices de Datastore que necesita tu aplicación, determinada a partir de las consultas que realiza mientras la pruebas. De esta forma, se genera un archivo llamado datastore-indexes-auto.xml en el directorio WEB-INF/appengine-generated/ del WAR. Para inhabilitar la configuración automática del índice, cree o edite el archivo datastore-indexes.xml en el directorio WEB-INF/, usando el atributo autoGenerate="false" para el elemento <datastore-indexes>.

Consultar Datastore en el servidor de desarrollo

Para consultar tu Datastore local mediante el servidor web de desarrollo, sigue estos pasos:

  1. Inicia el servidor de desarrollo como se ha descrito anteriormente.
  2. Ve a la consola de desarrollo.
  3. En el panel de navegación de la izquierda, haz clic en Datastore Viewer (Visor de Datastore) para ver el contenido de tu Datastore local.

El modelo de coherencia de Datastore

De forma predeterminada, el Datastore local está configurado de forma que el porcentaje de escrituras de Datastore que no se ven inmediatamente en las consultas globales sea del 10%.

Para ajustar este nivel de coherencia, asigna a la propiedad del sistema datastore.default_high_rep_job_policy_unapplied_job_pct un valor que corresponda a la cantidad de coherencia final que quieras que tenga tu aplicación.

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

Si vas a definir esta propiedad mediante el símbolo del sistema java_dev_appserver.sh, debes usar --jvm_flag=... para definirla:

google_appengine/google/appengine/tools/java/bin/java-dev_appserver.sh  --jvm_flag=-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

El intervalo válido de datastore.default_high_rep_job_policy_unapplied_job_pct es entre 0 y 100. Si usas números que no estén dentro de este intervalo, recibirás un error.

Especificar la política de asignación automática de IDs

Puedes configurar cómo asigna Datastore local los IDs de entidad automáticos.

El servidor de desarrollo admite las siguientes políticas de asignación automática de IDs:

sequential
Los
IDs se asignan a partir de la secuencia de números enteros consecutivos.
scattered
Los IDs se asignan a partir de una secuencia no repetida de números enteros distribuidos de forma aproximadamente uniforme.

La política predeterminada en el almacén de datos local es scattered.

Para especificar la política de ID automático, asigna a la propiedad del sistema datastore.auto_id_allocation_policy el valor sequential o scattered.

-Ddatastore.auto_id_allocation_policy=scattered

Para definir esta propiedad del sistema mediante una marca que se pasa a la macro dev_appserver, sigue estos pasos:

java_dev_appserver --jvm_flag=-Ddatastore.auto_id_allocation_policy=scattered

Simular cuentas de usuario

El servidor web de desarrollo simula las cuentas de Google con sus propias páginas de inicio y cierre de sesión. Cuando se ejecuta en el servidor web de desarrollo, los métodos que generan URLs de inicio y cierre de sesión devuelven URLs de /_ah/login y /_ah/logout en el servidor local.

La página de inicio de sesión de desarrollo incluye un formulario en el que puedes introducir una dirección de correo electrónico. En tu sesión se utilizará la dirección de correo electrónico que hayas introducido como usuario activo.

Para que la aplicación crea que el usuario que ha iniciado sesión es un administrador, marca la casilla "Iniciar sesión como administrador" del formulario.

Cómo utilizar la extracción de URL

Cuando tu aplicación usa la API URL Fetch para hacer una solicitud HTTP, el servidor web de desarrollo hace la solicitud directamente desde tu ordenador. El comportamiento puede ser diferente al de cuando tu aplicación se ejecuta en App Engine si usas un servidor proxy para acceder a sitios web.

La consola de desarrollo

El servidor web de desarrollo incluye una aplicación web de consola. Con la consola, puedes consultar el Datastore local.

Para acceder a la consola, ve a la URL /_ah/admin en tu servidor: http://localhost:8080/_ah/admin

Argumentos de símbolo del sistema

El comando del servidor de desarrollo admite los siguientes argumentos de símbolo del sistema:

--address=...

La dirección de host que se debe utilizar para el servidor. Es posible que tengas que definir este valor para poder acceder al servidor de desarrollo desde otro ordenador de tu red. La dirección 0.0.0.0 permite el acceso tanto a localhost como a nombre de host. Valor predeterminado: localhost.

--default_gcs_bucket=...

Define el nombre del segmento predeterminado de Google Cloud Storage.

--disable_update_check

Si se proporciona, el servidor de desarrollo no se pondrá en contacto con App Engine para comprobar si hay disponible una nueva versión del SDK. De forma predeterminada, el servidor busca una nueva versión al iniciarse y muestra un mensaje si hay una nueva versión disponible.

--generated_dir=...

Define el directorio en el que se crearán los archivos generados.

--help

Imprime un mensaje de ayuda y finaliza.

--jvm_flag=...

Pasa la marca dada como argumento de JVM. Se puede repetir para proporcionar varias marcas.

--port=...

El número de puerto que se debe utilizar para el servidor. El valor predeterminado es 8080 (ADMITE VALORES NULL).

--sdk_root=...

Ruta a la CLI de gcloud, si es diferente de la ubicación de la herramienta.

--server=...

El servidor que se usará para determinar la versión más reciente del SDK.