Puedes usar el servidor de desarrollo local para simular que se ejecuta tu aplicación de App Engine en producción y acceder a los servicios en paquetes de App Engine.
El entorno simulado aplica algunas restricciones de zonas de pruebas, como importaciones de módulos de Python 2 y funciones restringidas del sistema; pero no otras, como tiempos de espera de solicitud o cuotas.
El servidor de desarrollo local simula los servicios que proporcionan las bibliotecas en el SDK de App Engine, incluidos Datastore, Memcache y lista de tareas en cola, cuando realizas estas tareas de forma local. Cuando tu aplicación se ejecuta en el servidor de desarrollo, puedes hacer llamadas remotas a la API para la infraestructura de producción cuando usas los extremos HTTP de la APIs de Google.
Antes de comenzar
Desde que Python 2.7 alcanzó el fin de la asistencia, ya no puedes usar la última versión de dev_appserver.py
para ejecutar tus aplicaciones de manera local. Para descargar una versión archivada de devapp_server.py
, sigue estos pasos:
Desde el archivo, descarga la carpeta comprimida que contiene el servidor
dev_appserver.py
para los entornos de ejecución que alcanzaron el fin de la asistencia.Extrae el contenido del directorio a tu sistema de archivos local, como el directorio
/home
. Puedes encontrardev_appserver.py
en el directoriogoogle_appengine/
.
Configura el servidor de desarrollo local
Para ejecutar la herramienta del servidor de desarrollo local, debes configurar lo siguiente:
Verifica que hayas instalado un intérprete de Python 2 de la versión 2.7.12 o posterior.
Configura la variable de entorno
DEVAPPSERVER_ROOT
en tu shell en la ruta de acceso del intérprete de Python 2.
Ejecuta el servidor de desarrollo local
Después de configurar el servidor de desarrollo local y crear el archivo de configuración app.yaml
para tu app, puedes usar el comando dev_appserver.py
para ejecutar tu aplicación de manera local.
Para iniciar el servidor de desarrollo local, sigue estos pasos:
En el directorio que contiene el archivo de configuración
app.yaml
, ejecuta el comandodev_appserver.py
.Especifica la ruta del directorio a tu app, por ejemplo:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py [PATH_TO_YOUR_APP]
Como alternativa, puedes especificar el archivo de configuración de un servicio específico, como en el ejemplo siguiente:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py app.yaml
Para cambiar el puerto, debes incluir la opción
--port
:python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]
Reemplaza
[DEVAPPSERVER_ROOT]
por la ruta a la carpeta en la que extraes la versión archivada dedevapp_server.py
.Para obtener más información sobre las opciones del comando
dev_appserver.py
, consulta Opciones del servidor de desarrollo local.El servidor de desarrollo local ahora ejecuta y recibe solicitudes. Puedes visitar http://localhost:8080/ en tu navegador web para ver la aplicación en acción.
Si especificaste un puerto personalizado con la opción
--port
, recuerda abrir el navegador en ese puerto.
Si deseas detener el servidor local desde la línea de comandos, presiona las siguientes teclas:
- En macOS o Linux: Control+C
- En Windows: Control+Break
Especifica los IDs de aplicación
Si deseas acceder a tu ID de app en el servidor local, por ejemplo, para falsificar una dirección de correo electrónico, usa la función get_application_id()
. Si deseas obtener el nombre de host de la app en ejecución, usa la función get_default_version_hostname()
.
Detecta el entorno de ejecución de la aplicación
Si deseas determinar si el código se ejecuta en producción o en el servidor de desarrollo local, puedes verificar el valor de la variable de entorno SERVER_SOFTWARE
.
if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
# Production
else:
# Local development server
Usa Datastore local
El servidor de desarrollo local simula el almacén de datos en App Engine con un archivo local que persiste 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 índice de Datastore.
Explora el Datastore local
Si tu app escribió datos en Datastore local mediante el servidor de desarrollo local, puedes examinarlos desde Development Console de forma local.
Para explorar Datastore local, sigue estos pasos:
Ingresa al Visualizador de Datastore desde Development Console de forma local. La URL es
http://localhost:8000/datastore
.Observa el contenido de tu Datastore local.
Especifica la política de asignación de ID
Si necesitas App Engine de productividad, puedes configurar Datastore para que genere de los IDs de entidad forma automática.
Aunque las políticas de asignación de ID automática que usa el servidor de producción son difieren en su totalidad con las que usa el servidor de desarrollo, también puedes establecer la política de asignación de ID automática para el servidor local.
Para especificar la política de asignación de ID automática, usa la opción --auto_id_policy
:
python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --auto_id_policy=sequential
Reemplaza lo siguiente:
DEVAPPSERVER_ROOT por la ruta a la carpeta en la que extraes la versión archivada de
devapp_server.py
.--auto_id_policy
por uno de los siguientes valores:scattered
cuando los IDs (predeterminados) se asignan a partir de una secuencia no repetitiva de números enteros distribuidos de manera casi uniforme.sequential
: cuando los IDs se asignan a partir de la secuencia de números enteros consecutivos.
Borra el Datastore local
Si deseas borrar el almacén de datos local de una aplicación, debes invocar el servidor de desarrollo local de la manera siguiente:
python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --clear_datastore=yes app.yaml
Reemplaza DEVAPPSERVER_ROOT por la ruta a la carpeta en la que extraes la versión archivada de devapp_server.py
.
Cambia la ubicación del Datastore local
Si deseas 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
Reemplaza DEVAPPSERVER_ROOT por la ruta a la carpeta en la que extraes la versión archivada de devapp_server.py
.
Usa el servicio de usuarios
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 acceso y salida. Mientras se ejecuta en el servidor de desarrollo local, las funciones users.create_login_url
y users.create_logout_url
muestran las URLs de /_ah/login
y /_ah/logout
en el servidor local.
Usa el correo electrónico
El servidor de desarrollo local puede enviar correos electrónicos para llamar al servicio de correo de App Engine mediante el servidor SMTP o una instalación local de Sendmail.
Usa SMTP
Para habilitar la asistencia de correo con un servidor SMTP, invoca dev_appserver.py
de la manera siguiente:
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]
Reemplaza lo siguiente:
[DEVAPPSERVER_ROOT]
por la ruta a la carpeta en la que extraes la versión archivada dedevapp_server.py
.- Las opciones
--smtp_host
,--smtp_port
,--smtp_user
y--smtp_password
con tus propios valores de configuración
Usa Sendmail
Para habilitar la asistencia de correo con Sendmail, invoca dev_appserver.py
de la manera siguiente:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]
Reemplaza [DEVAPPSERVER_ROOT]
por la ruta de acceso a la carpeta en la que extraes la versión archivada de devapp_server.py
.
El servidor local usará el comando sendmail
para enviar mensajes de correo electrónico con la configuración predeterminada de tu instalación.
Usa la recuperación de URL
Cuando tu aplicación usa la API de recuperación de URL para realizar una solicitud HTTP, el servidor de desarrollo local realiza la solicitud directo desde tu computadora. El comportamiento de recuperación de URL en el servidor local puede diferir de la producción de App Engine si usas un servidor proxy para acceder a sitios web.
Usa la consola interactiva
La consola interactiva permite a los desarrolladores ingresar un código de Python arbitrario en un formulario web y ejecutarlo dentro del entorno de una app. Además, 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:
Accede a la consola interactiva desde Development Console de forma local. La URL es
http://localhost:8000/console
.Ingresa cualquier código de Python que desees ejecutar en el área de texto y, luego, envía el formulario para ejecutarlo. Por ejemplo, con el siguiente código, se crea una entidad de Datastore llamada
Greeting
con el contenido de textoHello
:from google.appengine.ext import ndb class Greeting(ndb.Model): content = ndb.TextProperty() e = Greeting(content="Hello") e.put()
Depura con el depurador de Python
Para usar el depurador de Python (pdb
), haz lo siguiente:
Agrega la siguiente línea a tu código:
import pdb; pdb.set_trace();
dev_appserver
se interrumpirá en este punto y pasará al estado REPLpdb
(bucle de lectura, evaluación e impresión), lo que te permite depurar el código desde la línea de comandos.Si tu aplicación realiza varias solicitudes simultáneas que invocan
pdb.set_trace()
, varias sesiones de depuración se iniciarán al mismo tiempo y cada una enviará resultados aSTDOUT
. Si deseas evitar esto, inhabilita la compatibilidad de procesamiento y subprocesos múltiples dedev_appserver
a fin de serializar las solicitudes. Para ello, usa lo siguiente:Inhabilita los subprocesos múltiples para lo siguiente:
- Todos los servicios que usan la marca
--threadsafe_override=false
- Un servicio que usa la marca
--threadsafe_override=<SERVICENAME>:false
- Múltiples servicios que usan la marca
--threadsafe_override=<SERVICE1NAME>:false,<SERVICE2NAME>:false
- Todos los servicios que usan la marca
Inhabilita varios procesos para:
- Todos los servicios que usan la marca
--max_module_instances=1
- Un servicio que usa la marca
--max_module_instances=<SERVICENAME>:1
- Múltiples servicios que usan la marca
--max_module_instances=<SERVICE1NAME>:1,<SERVICE2NAME>:1
- Todos los servicios que usan la marca