Inizia a sviluppare app Ruby su Rails eseguite nell'ambiente flessibile di App Engine. Le app che crei vengono eseguite sulla stessa infrastruttura alla base di tutti i prodotti Google, quindi puoi avere la certezza che possano scalare per offrire a tutti i tuoi utenti, pochi o milioni.
Questo tutorial presuppone che tu abbia familiarità con lo sviluppo web di Rails. Ti guiderà nella configurazione di Cloud SQL per MySQL con una nuova app Rails. Puoi anche utilizzare questo tutorial come riferimento per configurare le app Rails esistenti per l'utilizzo di Cloud SQL per MySQL.
Questo tutorial richiede Ruby 2.3.4 o versioni successive.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL Admin API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Preparazione di Cloud SQL per un'istanza MySQL
Per configurare Cloud SQL per un'istanza MySQL per questo tutorial:
Crea un'istanza di seconda generazione. In questo tutorial il nome dell'istanza è
rails-cloudsql-instance
.Creare un database nell'istanza; In questo tutorial il nome del database di produzione è
cat_list_production
.Imposta una password utente root per l'istanza.
Configurare l'ambiente locale per Rails
Per configurare l'ambiente locale per questo tutorial:
Per ulteriori informazioni sull'installazione delle guide e sulle relative dipendenze, consulta la guida ufficiale Introduzione a Rails.
Dopo aver completato i prerequisiti, puoi creare ed eseguire il deployment di un'app Rails utilizzando Cloud SQL per MySQL. Le seguenti sezioni illustrano la configurazione, il collegamento a Cloud SQL per MySQL e il deployment di un'app.
Crea una nuova app per elencare i gatti
Esegui il comando
rails new
per creare una nuova app Rails. Questa app archivia un elenco di gatti in Cloud SQL per MySQL.rails new cat_sample_app
Vai alla directory che contiene l'app Rails generata.
cd cat_sample_app
Esegui l'applicazione in locale
Per eseguire la nuova applicazione Rails sul tuo computer locale:
Installa le dipendenze utilizzando Bundler:
bundle install
Avvia un server web locale:
bundle exec bin/rails server
In un browser web, vai alla pagina http://localhost:3000/
Evviva! Sei su Rails. Il messaggio dall'app viene visualizzato nella pagina.
Genera ponteggi per un elenco di gatti
Genera ponteggi per una risorsa di nome Cat
che viene utilizzata per formare un elenco di gatti con il loro nome e la loro età.
Genera il ponteggio.
bundle exec rails generate scaffold Cat name:string age:integer
Il comando genera un modello, un controller e delle viste per la risorsa
Cat
.invoke active_record create db/migrate/20170804210744_create_cats.rb create app/models/cat.rb invoke rspec create spec/models/cat_spec.rb invoke resource_route route resources :cats invoke scaffold_controller create app/controllers/cats_controller.rb invoke erb create app/views/cats create app/views/cats/index.html.erb create app/views/cats/edit.html.erb create app/views/cats/show.html.erb create app/views/cats/new.html.erb create app/views/cats/_form.html.erb invoke jbuilder create app/views/cats/index.json.jbuilder create app/views/cats/show.json.jbuilder create app/views/cats/_cat.json.jbuilder invoke assets invoke js create app/assets/javascripts/cats.js invoke scss create app/assets/stylesheets/cats.scss invoke scss create app/assets/stylesheets/scaffolds.scss
Apri il file
config/routes.rb
per visualizzare i seguenti contenuti generati.Aggiungi
root 'cats#index'
al file.Salva il file e chiudilo.
Testa l'app Rails come istruzioni precedenti.
Utilizzo di Cloud SQL per MySQL con App Engine
Cloud SQL per MySQL è un servizio di database completamente gestito per configurare, gestire, gestire e amministrare i database MySQL relazionali in Google Cloud. Puoi utilizzare Cloud SQL in un'app Rails come qualsiasi altro database relazionale.
Configurare Cloud SQL per MySQL
Per iniziare a utilizzare Cloud SQL con la tua app Rails in produzione:
Aggiungi le gemme
mysql2
eappengine
al fileGemfile
.bundle add mysql2 bundle add appengine
Il tipo
Gemfile
Rails contiene le seguenti vocigem
aggiuntive:Per configurare l'app Rails da connettere a Cloud SQL, apri il file
config/database.yml
. Vengono visualizzate le seguenti impostazioni di database boilerplate per SQLite:Configura il nome di connessione dell'istanza Cloud SQL per l'ambiente di produzione App Engine.
Recupera il nome della connessione all'istanza.
gcloud sql instances describe rails-cloudsql-instance
Copia il valore accanto a
connectionName
.
Modifica la configurazione del database di produzione
database.yml
come descritto di seguito:Dove:
[YOUR_MYSQL_USERNAME]
rappresenta il tuo nome utente MySQL.[YOUR_MYSQL_PASSWORD]
rappresenta la password di MySQL.[YOUR_INSTANCE_CONNECTION_NAME]
rappresenta il nome della connessione all'istanza che hai copiato nel passaggio precedente.
L'app Rails è ora configurata per utilizzare Cloud SQL durante il deployment nell'ambiente flessibile di App Engine.
Distribuzione dell'applicazione nell'ambiente flessibile di App Engine
L'ambiente flessibile di App Engine utilizza un file denominato app.yaml
per descrivere la configurazione del deployment di un'app. Se questo file non è presente, l'interfaccia a riga di comando gcloud tenta di indovinare la configurazione del deployment.
Tuttavia, devi definire il file in modo da fornire le impostazioni di configurazione richieste per la chiave segreta di Rails e per Cloud SQL.
Per configurare l'app di esempio per il deployment in App Engine, crea un nuovo file denominato app.yaml
nella directory principale dell'applicazione Rails e aggiungi quanto segue:
Configura la chiave segreta di Rails nel file app.yaml
Quando viene eseguito il deployment di un'app Rails nell'ambiente production
, imposta la variabile di ambiente SECRET_KEY_BASE
con una chiave segreta per proteggere i dati della sessione utente. Questa variabile di ambiente viene letta dal file config/secrets.yml
nell'app Rails.
Genera una nuova chiave segreta.
bundle exec bin/rails secret
Copia la chiave segreta generata.
Apri il file
app.yaml
che hai creato in precedenza e aggiungi una sezioneenv_variables
.env_variables
definisce le variabili di ambiente nell'ambiente flessibile di App Engine. Il fileapp.yaml
dovrebbe essere simile all'esempio seguente con[SECRET_KEY]
sostituito con la chiave segreta.
Configura l'istanza Cloud SQL nel file app.yaml
Successivamente, configura l'ambiente flessibile di App Engine in modo da utilizzare un'istanza Cloud SQL specificata fornendo il nome della connessione all'istanza Cloud SQL nel file di configurazione app.yaml
.
Apri il file
app.yaml
e aggiungi una nuova sezione denominatabeta_settings
.Definisci un parametro nidificato
cloud_sql_instances
con il nome connessione istanza come valore.app.yaml
dovrebbe avere il seguente aspetto:
Crea un'app per l'ambiente flessibile di App Engine
Se è la prima volta che esegui il deployment di un'app, devi creare un'app dell'ambiente flessibile di App Engine e selezionare l'area geografica in cui vuoi eseguire l'app Rails.
Creare un'app App Engine.
gcloud app create
Seleziona una regione che supporti l'ambiente flessibile di App Engine per le app Ruby. Ulteriori informazioni su Aree geografiche e zone.
Eseguire il deployment di una nuova versione
Ora esegui il deployment di una nuova versione dell'app Rails descritta nel file app.yaml
senza reindirizzare il traffico dall'attuale versione predefinita per la pubblicazione.
Precompila gli asset Rails.
bundle exec bin/rails assets:precompile
Al termine della compilazione degli asset, esegui il deployment di una nuova versione dell'app.
gcloud app deploy --no-promote
Il completamento del deployment può richiedere diversi minuti. Attendi il messaggio di operazione riuscita. Puoi visualizzare le versioni di cui è stato eseguito il deployment nell'elenco delle versioni di App Engine.
Dopo aver eseguito il deployment della nuova versione, se tenti di accedere a questa nuova versione, viene visualizzato il seguente messaggio di errore perché non hai eseguito la migrazione del database.
Concedi l'autorizzazione richiesta per la gemma appengine
Quindi, concedi l'accesso all'account di servizio Cloud Build per eseguire migrazioni di database di produzione con la gemma appengine
.
Elenca i progetti disponibili.
gcloud projects list
Nell'output, individua il progetto da utilizzare per eseguire il deployment dell'app e copia il numero di progetto.
Aggiungi un nuovo membro al criterio IAM del progetto per il ruolo
roles/editor
per eseguire le migrazioni dei database. Sostituisci[YOUR-PROJECT-ID]
con l'ID del tuo progetto Google Cloud e[PROJECT_NUMBER]
con il numero del progetto che hai copiato nel passaggio precedente.gcloud projects add-iam-policy-binding [YOUR-PROJECT-ID] \ --member=serviceAccount:[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com \ --role=roles/editor
Eseguire la migrazione del database Rails
Le migrazioni dei database di Rails vengono utilizzate per aggiornare lo schema del database senza utilizzare direttamente la sintassi SQL. Ora esegui la migrazione del tuo database cat_list_production
.
La gemma appengine
fornisce l'attività Rake appengine:exec
per eseguire un comando sulla versione di App di cui è stato eseguito il deployment più recente nell'ambiente flessibile di App Engine.
Esegui la migrazione del database Cloud SQL per MySQL
cat_list_production
in produzione.bundle exec rake appengine:exec -- bundle exec rake db:migrate
Dovresti visualizzare un output simile al seguente:
---------- EXECUTE COMMAND ---------- bundle exec rake db:migrate Debuggee gcp:787021104993:8dae9032f8b02004 successfully registered == 20170804210744 CreateCats: migrating ======================================= -- create_table(:cats) -> 0.0219s == 20170804210744 CreateCats: migrated (0.0220s) ============================== ---------- CLEANUP ----------
Per verificare la migrazione del database, vai a:
[YOUR-VERSION]-dot-[YOUR-PROJECT-ID].appspot.com
Per il deployment senza problemi viene visualizzato quanto segue:
Esegui la migrazione del traffico a una nuova versione
Infine, indirizza il traffico alla versione di cui hai appena eseguito il deployment utilizzando il comando seguente:
gcloud app services set-traffic default --splits [YOUR-VERSION]=1
La nuova versione dell'app è ora accessibile da:
https://[YOUR-PROJECT-ID].appspot.com
Lettura dei log di App Engine
Ora che hai eseguito il deployment dell'app Rails, puoi leggere i log. Puoi leggere i log dell'applicazione utilizzando Esplora log disponibile in Google Cloud Console.
Scopri di più sulla lettura dei log utilizzando l'interfaccia a riga di comando gcloud.
Esegui la pulizia delle risorse
Una volta completato il tutorial, puoi eseguire la pulizia delle risorse che hai creato in modo che interrompano l'utilizzo della quota e che vengano addebitati dei costi. Le sezioni seguenti descrivono come eliminare o disattivare queste risorse.
Elimina progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.
Per eliminare il progetto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimina una versione di App Engine
Per eliminare una versione dell'applicazione:
- In the Google Cloud console, go to the Versions page for App Engine.
- Select the checkbox for the non-default app version that you want to delete.
- Per eliminare la versione dell'app, fai clic su Elimina.
Elimina un'istanza Cloud SQL
Per eliminare un'istanza Cloud SQL:
- In the Google Cloud console, go to the Instances page.
- Click the name of the SQL instance you that want to delete.
- To delete the instance, click Delete, and then follow the instructions.