Utilizzo del server di sviluppo locale

Puoi utilizzare il server di sviluppo locale per simulare l'esecuzione dell'applicazione App Engine in produzione e utilizzarlo per accedere ai servizi in bundle di App Engine.

L'ambiente simulato applica alcune limitazioni della sandbox, come funzioni di sistema limitate e importazioni di moduli Python 2, ma non altre, come timeout delle richieste o quote.

Il server di sviluppo locale simula anche i servizi forniti dalle librerie nell'SDK per App Engine, tra cui Datastore, Memcache e le code delle attività, eseguendo le relative attività localmente. Quando l'applicazione è in esecuzione nel server di sviluppo, puoi comunque effettuare chiamate API remote all'infrastruttura di produzione utilizzando gli endpoint HTTP delle API di Google.

Prima di iniziare

Poiché Python 2.7 ha raggiunto la fine del supporto, non puoi più utilizzare l'ultima versione di dev_appserver.py per eseguire le tue applicazioni in locale. Per scaricare una versione archiviata di devapp_server.py, procedi nel seguente modo:

  1. Dall'archivio, scarica la cartella compressa contenente il server dev_appserver.py per i runtime che hanno raggiunto la fine del supporto.

  2. Estrai il contenuto della directory nel file system locale, ad esempio nella directory /home. Puoi trovare dev_appserver.py nella directory google_appengine/.

Configura il server di sviluppo locale

Per eseguire lo strumento del server di sviluppo locale, devi configurare quanto segue:

  1. Verifica di aver installato un interprete Python 2 della versione 2.7.12 o successiva.

  2. 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 l'app in locale.

Per avviare il server di sviluppo locale:

  1. Nella directory che contiene il file di configurazione app.yaml, esegui il comando dev_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 cambiare 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 estrai la versione archiviata di devapp_server.py.

    Per scoprire di più sulle opzioni del comando dev_appserver.py, vedi Opzioni del server di sviluppo locale.

  2. Il server di sviluppo locale è ora in esecuzione e rimane in ascolto delle richieste. Per vedere l'applicazione in azione, puoi visitare la pagina all'indirizzo http://localhost:8080/ nel tuo browser web.

    Se hai specificato una porta personalizzata con l'opzione --port, ricordati di aprire il browser per quella porta.

Per arrestare il server locale dalla riga di comando, premi quanto segue:

  • macOS o Linux: Ctrl+C
  • Windows: Ctrl+Interruzione

Specifica gli ID applicazione

Per accedere al tuo ID app nel server locale, ad esempio per eseguire lo spoofing di un indirizzo email, utilizza la funzione get_application_id(). Per recuperare il nome host dell'app in esecuzione, utilizza la funzione get_default_version_hostname().

Rilevamento dell'ambiente di runtime dell'applicazione in corso...

Per determinare se il tuo 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 del datastore locale

Il server di sviluppo locale simula il datastore di App Engine utilizzando un file locale che persiste tra le chiamate al server locale.

Per ulteriori informazioni sugli indici e su index.yaml, consulta le pagine Indici di Datastore e Configurazione degli indici di Datastore.

Sfoglia il datastore locale

Se la tua app ha scritto dati nel datastore locale utilizzando il server di sviluppo locale, puoi consultarli nella console di sviluppo locale.

Per sfogliare Datastore locale:

  1. Avvia il server di sviluppo.

  2. Accedi al visualizzatore Datastore nella console di sviluppo locale. L'URL è http://localhost:8000/datastore.

  3. Visualizzare i contenuti locali di Datastore.

Specifica il criterio di allocazione degli ID

Per App Engine di produzione, puoi impostare Datastore in modo da generare automaticamente gli ID entità.

Anche se i criteri di assegnazione automatica degli ID per il server di produzione sono completamente diversi da quelli utilizzati dal server di sviluppo, è possibile impostare anche il criterio di allocazione automatica degli ID per il server locale.

Per specificare il criterio di assegnazione automatica degli 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 estrai la versione archiviata di devapp_server.py.

  • --auto_id_policy con uno dei seguenti:

    • scattered quando gli ID (predefinito) vengono assegnati da una sequenza non ripetuta di numeri interi distribuiti quasi uniformemente.
    • sequential quando gli ID vengono assegnati dalla sequenza di numeri interi consecutivi.

Cancella il datastore locale

Per cancellare il datastore locale per un'applicazione, richiama 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 estrai la versione archiviata di devapp_server.py.

Modifica la località Datastore locale

Per modificare la località utilizzata per il file del datastore, 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 estrai 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 uscita. Durante l'esecuzione nel server di sviluppo locale, le funzioni users.create_login_url e users.create_logout_url restituiscono gli URL per /_ah/login e /_ah/logout sul server locale.

Utilizza Mail

Il server di sviluppo locale può inviare email per le chiamate al servizio di posta 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, richiama 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 estrai la versione archiviata di devapp_server.py.
  • --smtp_host, --smtp_port, --smtp_user e --smtp_password con i tuoi valori di configurazione.

Utilizzo di Sendmail

Per attivare il supporto via posta con Sendmail, richiama dev_appserver.py in questo modo:

   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 estrai la versione archiviata di devapp_server.py.

Il server locale utilizzerà il comando sendmail per inviare messaggi email con la configurazione predefinita dell'installazione.

Utilizza il recupero URL

Quando la tua applicazione utilizza l'API di recupero URL per effettuare una richiesta HTTP, il server di sviluppo locale effettua la richiesta direttamente dal tuo computer. Il comportamento di recupero degli URL sul server locale può essere diverso da quello di produzione di App Engine 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 e di eseguirlo all'interno dell'ambiente dell'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:

  1. Avvia il server di sviluppo.

  2. Accedi alla console interattiva nella console di sviluppo locale. L'URL è http://localhost:8000/console.

  3. Inserisci nell'area di testo l'eventuale codice Python che vuoi eseguire, quindi invia il modulo per eseguirlo. Ad esempio, il seguente codice aggiungerà un'entità Datastore denominata Greeting con contenuto testuale di Hello:

      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):

  1. Aggiungi la seguente riga al codice:

    import pdb; pdb.set_trace();
    

    A questo punto, dev_appserver verrà interrotto e inserito nel REPL pdb (loop di lettura, valutazione e stampa), per consentirti di eseguire il debug del codice dalla riga di comando.

  2. Se la tua applicazione effettua più richieste simultanee che richiamano pdb.set_trace(), verranno avviate contemporaneamente più sessioni di debug e ognuna delle quali invia l'output a STDOUT. Per evitare che ciò accada, serializza le richieste disattivando il supporto multi-threading e multi-elaborazione di dev_appserver, nel seguente modo:

    1. Disabilita 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.
    2. Disattiva l'elaborazione multipla 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.