Puoi utilizzare il server di sviluppo locale per simulare l'esecuzione della tua applicazione App Engine in produzione e per accedere ai servizi integrati di App Engine.
L'ambiente simulato applica alcune limitazioni della sandbox, ad esempio funzioni di sistema limitate e importazioni di moduli Python 2, ma non altre, ad esempio timeout o quote delle richieste.
Il server di sviluppo locale simula anche i servizi forniti dalle librerie nell'SDK per App Engine, tra cui Datastore, Memcache e Task Queues, eseguendo le relative attività localmente. Quando l'applicazione è in esecuzione sul server di sviluppo, puoi comunque effettuare chiamate API remote all'infrastruttura di produzione utilizzando gli endpoint HTTP delle API Google.
Prima di iniziare
Poiché il supporto di Python 2.7 è terminato, non puoi più utilizzare la versione più recente di dev_appserver.py
per eseguire le tue applicazioni in locale. Per scaricare una versione archiviata di devapp_server.py
, segui questi passaggi:
Dall'archivio, scarica la cartella compressa contenente il
dev_appserver.py
server per i runtime che hanno raggiunto il termine del supporto.Estrai i contenuti della directory nel file system locale, ad esempio nella directory
/home
. Puoi trovaredev_appserver.py
nella directorygoogle_appengine/
.
Configura il server di sviluppo locale
Per eseguire lo strumento del server di sviluppo locale, devi configurare quanto segue:
Verifica di aver installato un interprete Python 2 della versione 2.7.12 o successiva.
Imposta la variabile di ambiente
DEVAPPSERVER_ROOT
nella shell sul percorso dell'interprete Python 2.
Esegui il server di sviluppo locale
Dopo aver configurato il server di sviluppo locale e creato il
file di configurazione app.yaml
per la tua app, puoi utilizzare il comando dev_appserver.py
per eseguire la tua app localmente.
Per avviare il server di sviluppo locale:
Nella directory che contiene il file di configurazione
app.yaml
, esegui il comandodev_appserver.py
.Specifica il percorso della directory dell'app, ad esempio:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py [PATH_TO_YOUR_APP]
In alternativa, puoi specificare il file di configurazione di un servizio specifico, ad esempio:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py app.yaml
Per modificare la porta, includi l'opzione
--port
:python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --port=9999 [PATH_TO_YOUR_APP]
Sostituisci
[DEVAPPSERVER_ROOT]
con il percorso della cartella in cui estrarre la versione archiviata didevapp_server.py
.Per scoprire di più sulle opzioni del comando
dev_appserver.py
, consulta Opzioni del server di sviluppo locale.Ora il server di sviluppo locale è in esecuzione e rimane in attesa delle richieste. Puoi visitare la pagina http://localhost:8080/ nel tuo browser web per vedere l'app in azione.
Se hai specificato una porta personalizzata con l'opzione
--port
, ricordati di aprire il browser su quella porta.
Per arrestare il server locale dalla riga di comando, premi quanto segue:
- macOS o Linux: Control+C
- Windows: Ctrl+Break
Specifica gli ID applicazione
Per accedere al tuo ID app nel server locale, ad esempio per falsificare un indirizzo email, utilizza la funzione
get_application_id()
. Per ottenere il nome host dell'app in esecuzione, utilizza la funzione
get_default_version_hostname()
.
Rilevamento dell'ambiente di runtime dell'applicazione
Per determinare se il codice è in esecuzione in produzione o nel
server di sviluppo locale, puoi controllare il valore della variabile di ambiente SERVER_SOFTWARE
:
if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
# Production
else:
# Local development server
Utilizzo di Datastore locale
Il server di sviluppo locale simula il datastore di App Engine utilizzando un file locale che persiste tra le invocazioni del server locale.
Per ulteriori informazioni su indici e index.yaml
, consulta le pagine Indici di Datastore e Configurazione dell'indice di Datastore.
Sfogliare il Datastore locale
Se la tua app ha scritto dati in Datastore locale utilizzando il server di sviluppo locale, puoi sfogliarli nella console di sviluppo locale.
Per sfogliare Datastore locale:
Accedi a Visualizzatore Datastore nella console di sviluppo locale. L'URL è
http://localhost:8000/datastore
.Visualizza i contenuti del tuo datastore locale.
Specifica il criterio di allocazione degli ID
Per App Engine di produzione, puoi impostare Datastore in modo da generare automaticamente gli ID entità.
Sebbene i criteri di assegnazione automatica dell'ID per il server di produzione siano completamente diversi da quelli utilizzati dal server di sviluppo, puoi impostare anche il criterio di allocazione automatica dell'ID per il server locale.
Per specificare il criterio di assegnazione automatica dell'ID, utilizza l'opzione --auto_id_policy
:
python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --auto_id_policy=sequential
Sostituisci:
DEVAPPSERVER_ROOT con il percorso della cartella in cui estrarre la versione archiviata di
devapp_server.py
.--auto_id_policy
con uno dei seguenti dispositivi:scattered
quando gli ID (predefiniti) vengono assegnati da una sequenza non ripetuta di interi distribuiti approssimativamente in modo uniforme.sequential
quando gli ID vengono assegnati dalla sequenza di numeri interi consecutivi.
Cancellare il datastore locale
Per cancellare il datastore locale di un'applicazione, invoca il server di sviluppo locale come segue:
python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --clear_datastore=yes app.yaml
Sostituisci DEVAPPSERVER_ROOT con il percorso della cartella in cui estrarre la versione archiviata di devapp_server.py
.
Modificare la posizione del Datastore locale
Per modificare la posizione utilizzata per il file del data store, utilizza l'opzione --datastore_path
:
python2 DEVAPPSERVER_ROOT/google_appengine/dev_appserver.py --datastore_path=/tmp/myapp_datastore app.yaml
Sostituisci DEVAPPSERVER_ROOT con il percorso della cartella in cui estrarre la versione archiviata di devapp_server.py
.
Utilizzare il servizio Utenti
App Engine fornisce un
servizio Utenti per semplificare
l'autenticazione e l'autorizzazione per la tua applicazione. Il server di sviluppo locale simula il comportamento degli Account Google con le proprie pagine di accesso e di uscita. Durante l'esecuzione sul
server di sviluppo locale, le funzioni
users.create_login_url
e users.create_logout_url
restaurano gli URL per /_ah/login
e /_ah/logout
sul server locale.
Utilizzare Posta
Il server di sviluppo locale può inviare email per le chiamate al servizio email di App Engine utilizzando un server SMTP o un'installazione locale di Sendmail.
Utilizzo di SMTP
Per attivare il supporto della posta con un server SMTP, invoca dev_appserver.py
come segue:
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]
Sostituisci:
[DEVAPPSERVER_ROOT]
con il percorso della cartella in cui estrarre la versione archiviata didevapp_server.py
.- Opzioni
--smtp_host
,--smtp_port
,--smtp_user
e--smtp_password
con i tuoi valori di configurazione.
Utilizzo di Sendmail
Per attivare il supporto della posta con Sendmail, invoca dev_appserver.py
come segue:
python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --enable_sendmail=yes [PATH_TO_YOUR_APP]
Sostituisci [DEVAPPSERVER_ROOT]
con il percorso della cartella in cui hai estratto la versione archiviata di devapp_server.py
.
Il server locale utilizzerà il comando sendmail
per inviare i messaggi email con la configurazione predefinita dell'installazione.
Utilizzare il recupero URL
Quando l'applicazione utilizza l'API URL Fetch per effettuare una richiesta HTTP, il server di sviluppo locale effettua la richiesta direttamente dal computer. Il comportamento di recupero dell'URL sul server locale potrebbe essere diverso da quello di App Engine di produzione se utilizzi un server proxy per accedere ai siti web.
Utilizzare la console interattiva
La console interattiva consente agli sviluppatori di inserire codice Python arbitrario in un modulo web ed eseguirlo all'interno dell'ambiente della loro app. Fornisce lo stesso accesso all'ambiente e ai servizi dell'applicazione di un file .py all'interno dell'applicazione stessa.
Per utilizzare la console interattiva:
Accedi alla console interattiva nella console di sviluppo locale. L'URL è
http://localhost:8000/console
.Inserisci il codice Python che vuoi eseguire nell'area di testo, quindi invia il form per eseguirlo. Ad esempio, il seguente codice aggiunge un'entità Datastore chiamata
Greeting
con contenuti di testo diHello
:from google.appengine.ext import ndb class Greeting(ndb.Model): content = ndb.TextProperty() e = Greeting(content="Hello") e.put()
Eseguire il debug con il debugger Python
Per utilizzare il debugger Python (pdb
):
Aggiungi la seguente riga al codice:
import pdb; pdb.set_trace();
A questo punto
dev_appserver
si interromperà e passerà al REPLpdb
(loop di lettura, valutazione e stampa), consentendoti di eseguire il debug del codice dalla riga di comando.Se la tua applicazione effettua più richieste simultanee che richiamano
pdb.set_trace()
, verranno avviate contemporaneamente più sessioni di debug, ciascuna delle quali invia l'output aSTDOUT
. Per evitare questo problema, serializza le richieste disattivando il supporto del multi-threading e del multi-processing didev_appserver
come segue:Disattiva il multi-threading per:
- Tutti i servizi che utilizzano il flag
--threadsafe_override=false
. - Un servizio che utilizza il flag
--threadsafe_override=<SERVICENAME>:false
. - Più servizi che utilizzano il flag
--threadsafe_override=<SERVICE1NAME>:false,<SERVICE2NAME>:false
.
- Tutti i servizi che utilizzano il flag
Disattiva il multiprocessing per:
- Tutti i servizi che utilizzano il flag
--max_module_instances=1
. - Un servizio che utilizza il flag
--max_module_instances=<SERVICENAME>:1
. - Più servizi che utilizzano il flag
--max_module_instances=<SERVICE1NAME>:1,<SERVICE2NAME>:1
.
- Tutti i servizi che utilizzano il flag