Utilizar el servidor de desarrollo local

Puedes usar el servidor de desarrollo local para simular el funcionamiento de tu aplicación de App Engine en producción, así como para acceder a los servicios agrupados de App Engine.

El entorno simulado aplica algunas restricciones del espacio aislado, como funciones del sistema y módulos de Python 2 restringidos, pero no otras, como los tiempos de espera o las cuotas de las solicitudes.

El servidor de desarrollo local también simula los servicios proporcionados por las bibliotecas del SDK de App Engine, como Datastore, Memcache y Task Queues, realizando sus tareas de forma local. Cuando tu aplicación se ejecuta en el servidor de desarrollo, puedes seguir haciendo llamadas a APIs remotas a la infraestructura de producción mediante los endpoints HTTP de las APIs de Google.

Antes de empezar

Como Python 2.7 ha llegado al final del periodo 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/.

Configurar el servidor de desarrollo local

Para ejecutar la herramienta del servidor de desarrollo local, debe configurar lo siguiente:

  1. Verifica que has instalado un intérprete de Python 2 de la versión 2.7.12 o posterior.

  2. Define la variable de entorno DEVAPPSERVER_ROOT en tu shell con la ruta de tu intérprete de Python 2.

Ejecutar el servidor de desarrollo local

Después de configurar el servidor de desarrollo local y crear el archivo de configuración app.yaml de tu aplicación, puedes usar el comando dev_appserver.py para ejecutarla localmente.

Para iniciar el servidor de desarrollo local, sigue estos pasos:

  1. En el directorio que contiene el archivo de configuración app.yaml, ejecuta el comando dev_appserver.py.

    Especifica la ruta del directorio de tu aplicación. Por ejemplo:

         python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py [PATH_TO_YOUR_APP]
    

    También puedes especificar el archivo de configuración de un servicio concreto. Por ejemplo:

         python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py app.yaml
    

    Para cambiar el puerto, incluye la opción --port:

         python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]
    

    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 las opciones del comando dev_appserver.py, consulta Opciones del servidor de desarrollo local.

  2. El servidor de desarrollo local ya está en funcionamiento y a la espera de solicitudes. Puedes visitar http://localhost:8080/ en tu navegador web para ver la aplicación en acción.

    Si has especificado un puerto personalizado con la opción --port, recuerda abrir tu navegador en ese puerto.

Para detener el servidor local desde la línea de comandos, pulsa lo siguiente:

  • macOS o Linux: Control+C
  • Windows: Control + Inter

Especificar IDs de aplicación

Para acceder a tu ID de aplicación en el servidor local (por ejemplo, para suplantar una dirección de correo electrónico), usa la función get_application_id(). Para obtener el nombre de host de la aplicación en ejecución, usa la función get_default_version_hostname().

Detectar el entorno de tiempo 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 comprobar el valor de la variable de entorno SERVER_SOFTWARE:

if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
  # Production
else:
  # Local development server

Usar el Datastore local

El servidor de desarrollo local simula el almacén de datos de App Engine mediante un archivo local que se conserva entre las invocaciones del servidor local.

Para obtener más información sobre los índices y index.yaml, consulta las páginas Índices de Datastore y Configuración de índices de Datastore.

Consultar el almacén de datos local

Si tu aplicación ha escrito datos en tu Datastore local mediante el servidor de desarrollo local, puedes consultarlos en la consola de desarrollo local.

Para consultar el Datastore local, sigue estos pasos:

  1. Inicia el servidor de desarrollo.

  2. Accede a Datastore Viewer en la consola de desarrollo local. La URL es http://localhost:8000/datastore.

  3. Ver el contenido de tu almacén de datos local.

Especificar la política de asignación de IDs

En el caso de las aplicaciones de producción de App Engine, puedes configurar Datastore para que genere automáticamente los IDs de las entidades.

Aunque las políticas de asignación automática de IDs del servidor de producción son completamente diferentes de las que usa el servidor de desarrollo, también puedes definir la política de asignación automática de IDs del servidor local.

Para especificar la política de asignación automática de IDs, usa la opción --auto_id_policy:

python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --auto_id_policy=sequential

Sustituye:

  • DEVAPPSERVER_ROOT con la ruta a la carpeta donde quieras extraer la versión archivada de devapp_server.py.

  • --auto_id_policy con uno de los siguientes elementos:

    • scattered cuando (de forma predeterminada) los IDs se asignan a partir de una secuencia no repetida de números enteros distribuidos de forma aproximadamente uniforme.
    • sequential cuando los IDs se asignan a partir de la secuencia de números enteros consecutivos.

Borrar el almacén de datos local

Para borrar el almacén de datos local de una aplicación, invoca el servidor de desarrollo local de la siguiente manera:

python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --clear_datastore=yes app.yaml

Sustituye DEVAPPSERVER_ROOT por la ruta a la carpeta en la que extraes la versión archivada de devapp_server.py.

Cambiar la ubicación local de Datastore

Para cambiar la ubicación que se usa para el archivo del almacén de datos, usa la opción --datastore_path:

python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml

Sustituye DEVAPPSERVER_ROOT por la ruta a la carpeta en la que extraes la versión archivada de devapp_server.py.

Usar el servicio Users

App Engine proporciona un servicio de usuarios para simplificar la autenticación y la autorización de tu aplicación. El servidor de desarrollo local simula el comportamiento de las cuentas de Google con sus propias páginas de inicio y cierre de sesión. Cuando se ejecuta en el servidor de desarrollo local, las funciones users.create_login_url y users.create_logout_url devuelven URLs de /_ah/login y /_ah/logout en el servidor local.

Usar Correo

El servidor de desarrollo local puede enviar correos en las llamadas al servicio de correo de App Engine mediante un servidor SMTP o una instalación local de Sendmail.

Usar SMTP

Para habilitar la compatibilidad con el correo mediante un servidor SMTP, invoca dev_appserver.py de la siguiente manera::

   python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --smtp_host=smtp.example.com --smtp_port=25 \
    --smtp_user=ajohnson --smtp_password=k1tt3ns [PATH_TO_YOUR_APP]

Sustituye:

  • [DEVAPPSERVER_ROOT] con la ruta a la carpeta donde quieras extraer la versión archivada de devapp_server.py.
  • --smtp_host, --smtp_port, --smtp_user y --smtp_password con tus propios valores de configuración.

Usar Sendmail

Para habilitar la asistencia de correo con Sendmail, invoca dev_appserver.py de la siguiente manera:

   python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]

Sustituye [DEVAPPSERVER_ROOT] por la ruta a la carpeta en la que has extraído la versión archivada de devapp_server.py.

El servidor local usará el comando sendmail para enviar mensajes de correo con la configuración predeterminada de tu instalación.

Usar la obtención de URLs

Cuando tu aplicación usa la API de obtención de URLs para hacer una solicitud HTTP, el servidor de desarrollo local hace la solicitud directamente desde tu ordenador. El comportamiento de la obtención de URLs en el servidor local puede ser diferente del de App Engine en producción si usas un servidor proxy para acceder a sitios web.

Usar la consola interactiva

La consola interactiva permite a los desarrolladores introducir código Python arbitrario en un formulario web y ejecutarlo en el entorno de su aplicación. Proporciona el mismo acceso al entorno y a los servicios de la aplicación que un archivo .py dentro de la propia aplicación.

Para usar la consola interactiva, sigue estos pasos:

  1. Inicia el servidor de desarrollo.

  2. Accede a la consola interactiva en la consola de desarrollo local. La URL es http://localhost:8000/console.

  3. Escribe el código Python que quieras ejecutar en el área de texto y, a continuación, envía el formulario para ejecutarlo. Por ejemplo, el siguiente código añadirá una entidad de Datastore llamada Greeting con el contenido de texto Hello:

      from google.appengine.ext import ndb
      class Greeting(ndb.Model):
        content = ndb.TextProperty()
    
      e = Greeting(content="Hello")
      e.put()
    

Depurar con el depurador de Python

Para usar el depurador de Python (pdb), sigue estos pasos:

  1. Añade la siguiente línea a tu código:

    import pdb; pdb.set_trace();
    

    dev_appserver se interrumpirá en este punto y se insertará en el bucle de lectura, evaluación e impresión (REPL) de pdb, lo que te permitirá depurar el código desde la línea de comandos.

  2. Si tu aplicación hace varias solicitudes simultáneas que invocan pdb.set_trace(), se iniciarán varias sesiones de depuración simultáneamente, cada una de las cuales enviará la salida a STDOUT. Para evitarlo, serializa tus solicitudes inhabilitando la compatibilidad con multihilo y multiproceso de dev_appserver, tal como se indica a continuación:

    1. Inhabilita el multihilo para lo siguiente:

      • Todos los servicios que usan la marca --threadsafe_override=false.
      • Un servicio que usa la marca --threadsafe_override=<SERVICENAME>:false.
      • Varios servicios usan la marca --threadsafe_override=<SERVICE1NAME>:false,<SERVICE2NAME>:false.
    2. Inhabilita el multiprocesamiento en los siguientes casos:

      • Todos los servicios que usan la marca --max_module_instances=1.
      • Un servicio que usa la marca --max_module_instances=<SERVICENAME>:1.
      • Varios servicios usan la marca --max_module_instances=<SERVICE1NAME>:1,<SERVICE2NAME>:1.