Vous pouvez utiliser le serveur de développement local pour simuler l'exécution de votre application App Engine en production, ainsi que pour accéder aux services groupés App Engine.
L'environnement simulé applique certaines restrictions de bac à sable, telles que des importations de modules Python 2 et des fonctions système limitées, mais aucune autre, telles que des délais de requêtes ou des quotas.
Le serveur de développement local simule également les services fournis par les bibliothèques du SDK pour App Engine, y compris Datastore, Memcache et les files de tâches, en effectuant leurs tâches localement. Lorsque votre application s'exécute sur le serveur de développement, vous pouvez toujours effectuer des appels d'API distants vers l'infrastructure de production à l'aide des points de terminaison HTTP des API Google.
Avant de commencer
Python 2.7 ayant atteint la fin de la période de compatibilité, vous ne pouvez plus utiliser la dernière version de dev_appserver.py
pour exécuter localement vos applications. Pour télécharger une version archivée de devapp_server.py
, procédez comme suit :
À partir des archives, téléchargez le dossier compressé contenant le serveur
dev_appserver.py
pour les environnements d'exécution qui ne sont plus compatibles.Extrayez le contenu du répertoire vers votre système de fichiers local, par exemple vers votre répertoire
/home
. Vous trouverezdev_appserver.py
dans le répertoiregoogle_appengine/
.
Configurer le serveur de développement local
Pour exécuter l'outil de serveur de développement local, vous devez d'abord appliquer la procédure suivante :
Vérifiez que vous avez installé un interpréteur Python 2 version 2.7.12 ou ultérieure.
Définissez la variable d'environnement
DEVAPPSERVER_ROOT
dans votre shell sur le chemin d'accès à votre interpréteur Python 2.
Exécuter le serveur de développement local
Après avoir configuré le serveur de développement local et créé le fichier de configuration app.yaml
pour votre application, vous pouvez utiliser la commande dev_appserver.py
pour exécuter votre application localement.
Pour démarrer le serveur de développement local, procédez comme suit :
Exécutez la commande
dev_appserver.py
dans le répertoire contenant votre fichier de configurationapp.yaml
.Spécifiez le chemin d'accès au répertoire de votre application, par exemple :
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py [PATH_TO_YOUR_APP]
Vous pouvez également spécifier le fichier de configuration d'un service spécifique, par exemple :
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py app.yaml
Pour changer le port, incluez l'option
--port
:python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]
Remplacez
[DEVAPPSERVER_ROOT]
par le chemin d'accès au dossier dans lequel vous extrayez la version archivée dedevapp_server.py
.Pour en savoir plus sur les options de la commande
dev_appserver.py
, consultez la page Options du serveur de développement local.Le serveur de développement local est désormais en cours d'exécution et à l'écoute des requêtes. Vous pouvez saisir l'adresse http://localhost:8080/ dans votre navigateur Web pour voir l'application en action.
Si vous avez spécifié un port personnalisé avec l'option
--port
, n'oubliez pas d'ouvrir votre navigateur pour ce port.
Pour arrêter le serveur local à partir de la ligne de commande, appuyez sur les touches suivantes :
- macOS ou Linux : Contrôle+C
- Windows : Contrôle+Pause
Spécifier des ID d'application
Pour accéder à l'ID de votre application sur le serveur local, par exemple pour simuler une adresse e-mail, utilisez la fonction get_application_id()
. Pour obtenir le nom d'hôte de l'application en cours d'exécution, utilisez la fonction get_default_version_hostname()
.
Détecter l'environnement d'exécution de l'application
Pour déterminer si votre code est en cours d'exécution en production ou sur le serveur de développement local, vous pouvez vérifier la valeur de la variable d'environnement SERVER_SOFTWARE
.
if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
# Production
else:
# Local development server
Utiliser le datastore local
Le serveur de développement local simule le datastore App Engine à l'aide d'un fichier local persistant entre les appels du serveur local.
Pour plus d'informations sur les index et index.yaml
, consultez les pages Index Datastore et Configurer des index Datastore.
Parcourir le datastore local
Si votre application a écrit des données sur votre datastore local à l'aide du serveur de développement local, vous pouvez les parcourir dans la console de développement local.
Pour parcourir le datastore local :
Accédez au lecteur Datastore dans la console de développement local, (URL :
http://localhost:8000/datastore
)Affichez le contenu du datastore local.
Spécifier la stratégie d'attribution d'ID
Pour App Engine en production, vous pouvez configurer le datastore pour qu'il génère automatiquement des ID d'entité.
Bien que les stratégies d'attribution automatique d'ID pour le serveur de production soient complètement différentes de celles utilisées par le serveur de développement, vous pouvez également définir la stratégie d'attribution automatique d'ID pour le serveur local.
Pour spécifier la règle d'attribution automatique d'ID, utilisez l'option --auto_id_policy
:
python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --auto_id_policy=sequential
Remplacez :
DEVAPPSERVER_ROOT par le chemin d'accès au dossier dans lequel vous extrayez la version archivée de
devapp_server.py
.--auto_id_policy
par l'un des éléments suivants :scattered
(par défaut) lorsque les identifiants sont attribués à partir d'une séquence non répétitive d'entiers répartis de manière quasi uniforme.sequential
lorsque les ID sont attribués à partir de la séquence d'entiers consécutifs.
Effacer le datastore local
Pour effacer le datastore local d'une application, invoquez le serveur de développement local comme suit :
python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --clear_datastore=yes app.yaml
Remplacez DEVAPPSERVER_ROOT par le chemin d'accès au dossier dans lequel vous extrayez la version archivée de devapp_server.py
.
Modifier l'emplacement du datastore local
Pour modifier l'emplacement utilisé pour le fichier du datastore, employez l'option --datastore_path
:
python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml
Remplacez DEVAPPSERVER_ROOT par le chemin d'accès au dossier dans lequel vous extrayez la version archivée de devapp_server.py
.
Utiliser le service Users
App Engine fournit un service Users pour simplifier l'authentification et les autorisations de votre application. Le serveur de développement local simule le comportement des comptes Google avec ses propres pages de connexion et de déconnexion. Lorsque qu'elles s'exécutent sur le serveur de développement local, les fonctions users.create_login_url
et users.create_logout_url
renvoient les URL de /_ah/login
et /_ah/logout
sur le serveur local.
Utiliser la messagerie
Le serveur de développement local peut envoyer des e-mails pour les appels au service de messagerie App Engine à l'aide d'un serveur SMTP ou d'une installation locale de Sendmail.
Utiliser SMTP
Pour activer la messagerie avec un serveur SMTP, appelez dev_appserver.py
comme suit :
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]
Remplacez :
[DEVAPPSERVER_ROOT]
par le chemin d'accès au dossier dans lequel vous extrayez la version archivée dedevapp_server.py
.- Les options
--smtp_host
,--smtp_port
,--smtp_user
et--smtp_password
par vos propres valeurs de configuration.
Utiliser Sendmail
Pour activer la messagerie avec Sendmail, appelez dev_appserver.py
comme suit :
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]
Remplacez [DEVAPPSERVER_ROOT]
par le chemin d'accès au dossier dans lequel vous extrayez la version archivée de devapp_server.py
.
Le serveur local utilise la commande sendmail
pour envoyer des e-mails avec la configuration par défaut de votre installation.
Utiliser URL Fetch
Lorsque l'application utilise l'API URL Fetch pour exécuter une requête HTTP, le serveur de développement local effectue la requête directement à partir de votre ordinateur. Si vous accédez aux sites Web via un serveur proxy, le comportement du service URL Fetch sur le serveur local peut être différent de celui d'App Engine en production.
Utiliser la console interactive
La console interactive permet aux développeurs de saisir du code Python arbitraire dans un formulaire Web et de l'exécuter dans l'environnement de leur application. Il fournit le même accès à l'environnement et aux services de l'application qu'un fichier .py à l'intérieur de l'application elle-même.
Pour utiliser la console interactive, procédez comme suit :
Accédez à la console interactive dans la console de développement local, (URL :
http://localhost:8000/console
).Entrez le code Python de votre choix dans la zone de texte, puis envoyez le formulaire pour l'exécuter. Par exemple, le code suivant ajoute une entité Datastore appelée
Greeting
dont le contenu textuel estHello
:from google.appengine.ext import ndb class Greeting(ndb.Model): content = ndb.TextProperty() e = Greeting(content="Hello") e.put()
Déboguer avec le débogueur Python
Pour utiliser le débogueur Python (pdb
), procédez comme suit :
Ajoutez la ligne suivante dans votre code :
import pdb; pdb.set_trace();
dev_appserver
sera rompu à ce stade et passera dans le REPLpdb
(read-eval-print-loop), ce qui vous permettra de déboguer le code à partir de la ligne de commande.Si votre application effectue plusieurs requêtes simultanées qui appellent
pdb.set_trace()
, plusieurs sessions de débogage démarreront simultanément, chacune d'elles envoyant une sortie àSTDOUT
. Pour éviter ce problème, sérialisez vos requêtes en désactivant la compatibilité multithread et multitraitementdev_appserver
comme suit :Désactivez le traitement multithread pour les éléments suivants :
- Tous les services utilisant l'option
--threadsafe_override=false
- Un service utilisant l'option
--threadsafe_override=<SERVICENAME>:false
- Plusieurs services utilisant l'option
--threadsafe_override=<SERVICE1NAME>:false,<SERVICE2NAME>:false
- Tous les services utilisant l'option
Désactivez le multitraitement pour les éléments suivants :
- Tous les services utilisant l'option
--max_module_instances=1
- Un service utilisant l'option
--max_module_instances=<SERVICENAME>:1
- Plusieurs services utilisant l'option
--max_module_instances=<SERVICE1NAME>:1,<SERVICE2NAME>:1
- Tous les services utilisant l'option