Molte app richiedono la gestione delle sessioni per l'autenticazione e le preferenze utente. Sinatra include un'implementazione basata sulla memoria per eseguire questa funzione. Tuttavia, questa implementazione non è adatta a un'app che può essere pubblicata da più istanze, perché la sessione registrata su un'istanza potrebbe essere diversa da altre istanze. Questo tutorial mostra come gestire le sessioni su App Engine.
Obiettivi
- Scrivere l'app.
- Eseguire l'app in locale.
- Eseguire il deployment dell'app su App Engine.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.
Prima di iniziare
- Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.- Prepara l'ambiente di sviluppo.
Configurazione del progetto
Nella finestra del terminale, inizia in una directory a tua scelta e crea una nuova directory denominata
sessions. Tutto il codice di questo tutorial si trova nella directorysessions.Passa alla directory
sessions:cd sessionsInizializza il file
Gemfile:bundle initAggiungi quanto segue al file Gemfile risultante:
Il file Gemfile elenca tutte le librerie Ruby non standard che App Engine deve caricare per la tua app:
google-cloud-firestoreè il client Ruby per l'API Firestore.Sinatra è il framework web Ruby utilizzato per l'app.
Installa le dipendenze:
bundle install
Scrittura dell'app web
Questa app mostra saluti in lingue diverse per ogni utente. Gli utenti che ritornano vengono sempre salutati nella stessa lingua.
Con un editor di testo, crea un file denominato
app.rbnella directorysessionscon il seguente contenuto:
Creazione dell'archivio delle sessioni
Prima che la tua app possa memorizzare le preferenze di un utente, devi avere un modo per memorizzare le informazioni sull'utente corrente in una sessione. Il seguente diagramma illustra come Firestore gestisce le sessioni per l'app App Engine.
Sinatra ha il supporto integrato per il salvataggio dei dati di sessione in un cookie. Per salvare in Firestore, devi definire il tuo oggetto Rack::Session.
Nella directory
sessions, crea un file denominatofirestore_session.rbcon il seguente contenuto:
Eliminazione delle sessioni
Così com'è, questa app non elimina le sessioni vecchie o scadute. Puoi eliminare i dati di sessione nella Google Cloud console, oppure implementare una strategia di eliminazione automatica.
Esecuzione in locale
Avvia il server HTTP:
bundle exec ruby app.rbVisualizza l'app nel browser web.
Viene visualizzato uno dei cinque saluti: "Hello World", "Hallo Welt", "Hola mundo", "Salut le Monde" o "Ciao Mondo". La lingua cambia se apri la pagina in un browser diverso o in modalità di navigazione in incognito. Puoi visualizzare e modificare i dati di sessione nella Google Cloud console.
Per arrestare il server HTTP, nella finestra del terminale premi
Control+C.
Deployment ed esecuzione su App Engine
Puoi utilizzare l' ambiente standard di App Engine per creare ed eseguire il deployment di un'app che viene eseguita in modo affidabile con carichi elevati e grandi quantità di dati.
Questo tutorial utilizza l'ambiente standard di App Engine per eseguire il deployment del server.
Nella finestra del terminale, crea un file
app.yamle incolla quanto segue nel file:Esegui il deployment dell'app su App Engine:
gcloud app deployVisualizza l'app live all'URL seguente, dove
PROJECT_IDè il tuo Google Cloud ID progetto:https://PROJECT_ID.appspot.com
Il saluto viene ora fornito da un server web in esecuzione su un'istanza di App Engine.
Esecuzione del debug dell'app
Se non riesci a connetterti alla tua app App Engine, controlla quanto segue:
- Verifica che i comandi di deployment
gcloudsiano stati completati correttamente e non abbiano generato errori. Se si sono verificati errori (ad esempio,message=Build failed), correggili e prova a eseguire di nuovo il deployment dell'app App Engine. Nella Google Cloud console, vai alla pagina Esplora log.
Nell'elenco a discesa Risorse selezionate di recente, fai clic Applicazione App Engine, quindi su Tutti module_id. Viene visualizzato un elenco di richieste da quando hai visitato l'app. Se non vedi un elenco di richieste, verifica di aver selezionato Tutti module_id dall'elenco a discesa. Se nella Google Cloud console vengono visualizzati messaggi di errore, verifica che il codice dell'app corrisponda a l codice nella sezione relativa alla scrittura dell'app web.
Assicurati che l'API Firestore sia abilitata.
Libera spazio
Elimina il progetto
- Nella Google Cloud console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto e fai clic su Chiudi per eliminare il progetto.
Elimina l'istanza di App Engine
- Nella Google Cloud console, vai alla pagina Versioni di App Engine.
- Seleziona la casella di controllo per la versione dell'app non predefinita che vuoi eliminare.
- Per eliminare la versione dell'app, fai clic su Elimina.
Passaggi successivi
- Prova altri tutorial su Cloud Run Functions.
- Scopri di più su App Engine.
- Prova Cloud Run, che ti consente di eseguire container stateless in un ambiente completamente gestito o nel tuo cluster Google Kubernetes Engine.