Dê os primeiros passos no desenvolvimento de aplicativos Ruby on Rails executados no ambiente flexível do App Engine. Os aplicativos que você cria são executados na mesma infraestrutura que capacita todos os produtos do Google. Assim, você tem a certeza de que eles são escalonados para suprir todos os usuários, sejam eles poucos ou milhões.
Para acompanhar o tutorial, é preciso conhecer o desenvolvimento do Rails para a Web. No tutorial, mostramos como configurar o Cloud SQL para PostgreSQL com um novo aplicativo do Rails. Também é possível usar este tutorial como referência para configurar aplicativos Rails atuais para usar o Cloud SQL para PostgreSQL.
Este tutorial requer o Ruby 2.6 ou 2.7.
Antes de começar
- 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
Como preparar uma instância do Cloud SQL para PostgreSQL
Configure o Cloud SQL para uma instância do PostgreSQL.
Crie uma instância do PostgreSQL. Neste tutorial, o nome da instância é
rails-cloudsql-instance
.Crie um banco de dados na instância. Neste tutorial, o nome do banco de dados de produção é
cat_list_production
.
Como configurar o ambiente local para Rails
Para configurar o ambiente local para este tutorial, siga estas etapas:
Para mais informações sobre como instalar o Rails e as respectivas dependências, consulte o guia oficial Primeiros passos com o Rails (em inglês).
Depois de concluir os pré-requisitos, crie e implante um aplicativo Rails usando o Cloud SQL para PostgreSQL. As seções a seguir orientam você na configuração, na conexão com o Cloud SQL para PostgreSQL e na implantação de um aplicativo.
Criar um novo aplicativo para listar gatos
Execute o comando
rails new
para criar um novo aplicativo do Rails. Este aplicativo armazena uma lista de gatos no Cloud SQL para PostgreSQL.rails new cat_sample_app
Acesse o diretório que contém o aplicativo do Rails gerado.
cd cat_sample_app
Executar o aplicativo localmente
Para executar o novo aplicativo do Rails no computador local, siga estas etapas:
Instale dependências usando o Bundler.
bundle install
Inicie um servidor da Web local:
bundle exec bin/rails server
Em um navegador, acesse http://localhost:3000/.
Uma mensagem Yay! Você está no Rails! do aplicativo é exibido na página.
Gerar a estrutura de uma lista de gatos
Gere a estrutura de um recurso chamado Cat
que é usado para formar uma lista
de gatos com o nome e a idade deles.
Gere a estrutura.
bundle exec rails generate scaffold Cat name:string age:integer
O comando gera um modelo, um controlador e visualizações para o recurso
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
Abra o arquivo
config/routes.rb
para ver o seguinte conteúdo gerado.Adicione
root 'cats#index'
ao arquivo.Salve e feche o arquivo.
Teste o aplicativo do Rails conforme indicado anteriormente.
Como usar o Cloud SQL para PostgreSQL com o App Engine
O Cloud SQL para PostgreSQL é um serviço de banco de dados totalmente gerenciado para configurar, manter, gerenciar e administrar seus bancos de dados relacionais do PostgreSQL no Google Cloud. É possível usar o Cloud SQL em um aplicativo do Rails como qualquer outro banco de dados relacional.
Configurar o Cloud SQL para PostgreSQL
Para começar a usar o Cloud SQL com seu aplicativo do Rails em produção, siga estas etapas:
Adicione as gems
pg
eappengine
ao arquivoGemfile
.bundle add pg bundle add appengine
O
Gemfile
do Rails contém as seguintes entradasgem
adicionais:Para configurar o aplicativo Rails para se conectar ao Cloud SQL, abra o arquivo
config/database.yml
. As seguintes configurações do banco de dados padrão para o SQLite são exibidas:Configure o nome da conexão da instância do Cloud SQL para o ambiente de produção do App Engine.
Recupere o nome da conexão da instância.
gcloud sql instances describe rails-cloudsql-instance
Copie o valor ao lado de
connectionName
.
Modifique a configuração do banco de dados de produção
database.yml
para o seguinte:Em que:
[YOUR_POSTGRES_USERNAME]
representa o nome de usuário da sua instância do Cloud SQL para PostgreSQL.[YOUR_POSTGRES_PASSWORD]
representa a senha da instância do Cloud SQL para PostgreSQL.[YOUR_INSTANCE_CONNECTION_NAME]
representa o nome da conexão da instância que você copiou na etapa anterior.
Agora, o aplicativo do Rails está configurado para usar o Cloud SQL quando fizer implantações no ambiente flexível do App Engine.
Como implantar o app no ambiente flexível do App Engine
O ambiente flexível do App Engine usa um arquivo denominado app.yaml para descrever a configuração de implantação de um aplicativo. Se esse arquivo não estiver presente, a CLI gcloud
tentará deduzir a configuração da implantação.
No entanto, é preciso definir o arquivo para fornecer as configurações necessárias do Cloud SQL e da chave secreta do Rails.
Para configurar o aplicativo de amostra para implantação no App Engine, crie um novo
arquivo chamado app.yaml
na raiz do diretório de aplicativos do Rails e adicione o
seguinte:
Configurar a chave secreta do Rails no arquivo app.yaml
Quando um aplicativo do Rails é implantado no ambiente production
, defina a
variável de ambiente SECRET_KEY_BASE
com uma chave secreta para proteger os dados da sessão
do usuário. Essa variável de ambiente é lida no arquivo config/secrets.yml
no
aplicativo do Rails.
Gere uma nova chave secreta.
bundle exec bin/rails secret
Copie a chave secreta gerada.
Abra o arquivo
app.yaml
criado anteriormente e adicione uma seçãoenv_variables
. Oenv_variables
define variáveis de ambiente no ambiente flexível do App Engine. O arquivoapp.yaml
será semelhante ao exemplo a seguir com[SECRET_KEY]
substituído pela chave secreta.
Configurar a instância do Cloud SQL no arquivo app.yaml
Em seguida, configure o ambiente flexível do App Engine para usar uma instância
especificada do Cloud SQL, fornecendo o nome da conexão de
instância do Cloud SQL no arquivo de configuração app.yaml
.
Abra o arquivo
app.yaml
e adicione uma nova seção chamadabeta_settings
.Defina um parâmetro aninhado
cloud_sql_instances
com o nome da conexão da instância como o valor.O
app.yaml
precisa ser semelhante ao seguinte:
Criar um aplicativo de ambiente flexível do App Engine
Se esta é a primeira vez que você está implantando um aplicativo, é preciso criar um aplicativo de ambiente flexível do App Engine e selecionar a região em que você quer executar o aplicativo do Rails.
Crie um aplicativo do App Engine.
gcloud app create
Selecione uma região compatível com o ambiente flexível do App Engine para aplicativos em Ruby. Leia mais sobre Regiões e zonas.
Implantar uma nova versão
Em seguida, execute este comando para implantar uma nova versão do app Rails descrita no arquivo app.yaml
sem redirecionar o tráfego da versão de serviço padrão atual:
gcloud app deploy --no-promote
A conclusão da implantação leva alguns minutos. Espere até surgir uma mensagem de sucesso. É possível visualizar as versões implantadas na lista de versões do App Engine.
Depois de implantar a nova versão, se você tentar acessá-la, a seguinte mensagem de erro será exibida. Isso acontece porque você não migrou o banco de dados.
Conceder a permissão necessária para a gem appengine
Em seguida, conceda acesso à conta de serviço cloudbuild para executar migrações do
banco de dados de produção com a gem appengine
.
Liste os projetos disponíveis.
gcloud projects list
Na resposta, encontre o projeto que você quer usar para implantar o aplicativo e copie o número do projeto.
Adicione um novo membro à política do IAM do projeto para o papel
roles/editor
para executar migrações do banco de dados. Substitua[YOUR-PROJECT-ID]
pelo ID do projeto do Google Cloud e substitua[PROJECT_NUMBER]
pelo número do projeto que você copiou na etapa anterior.gcloud projects add-iam-policy-binding [YOUR-PROJECT-ID] \ --member=serviceAccount:[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com \ --role=roles/editor
Migrar o banco de dados do Rails
Com essas migrações, é possível atualizar o esquema do banco de dados sem usar diretamente a sintaxe do SQL. Em seguida, você migra seu banco de dados cat_list_production
.
A gem appengine
fornece a tarefa Rake appengine:exec
para executar um comando
na versão mais recente do aplicativo implantada no ambiente de produção flexível
do App Engine.
Migre o banco de dados
cat_list_production
do Cloud SQL para PostgreSQL em produção.bundle exec rake appengine:exec -- bundle exec rake db:migrate
Você verá uma saída como:
---------- 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 ----------
Para verificar a migração do banco de dados, digite o seguinte URL no seu navegador:
https://VERSION_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com
Substitua:
VERSION_ID
: a nova versão do aplicativo que você implantou anteriormente. Para ver uma lista de versões, usegcloud app versions list
. O último item da versão padrão do serviço é a implantação mais recente.PROJECT_ID
: é o ID do projeto do Google Cloud.REGION_ID
: um código que o App Engine atribui ao aplicativo
Ao concluir a implantação, você verá o seguinte:
Migrar o tráfego para a nova versão
Por fim, direcione o tráfego para a versão recém-implantada usando o comando a seguir:
gcloud app services set-traffic default --splits [YOUR-VERSION]=1
A nova versão do aplicativo agora está acessível no seguinte URL:
https://PROJECT_ID.REGION_ID.r.appspot.com
Como ler registros do App Engine
Agora que você já implantou o aplicativo do Rails, será possível ler os registros. Para ler os registros do aplicativo, use o Explorador de registros localizado no Console do Google Cloud.
Saiba mais sobre como ler registros usando a CLI gcloud
.
Fazer a limpeza dos recursos
Depois de concluir o tutorial, limpe os recursos que você criou para que eles parem de usar a cota e incorrer em cobranças. Nas seções a seguir, você aprenderá a excluir e desativar esses recursos.
Excluir projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- 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.
Excluir uma versão do aplicativo do App Engine
Para excluir uma versão do app:
- 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.
- Para excluir a versão do app, clique em Excluir.
Excluir uma instância Cloud SQL
Para excluir uma instância do 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.