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 MySQL 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 MySQL.
O tutorial requer o Ruby 2.3.4 ou posterior.
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 o Cloud SQL para uma instância do MySQL
Para configurar o Cloud SQL para uma instância do MySQL para este tutorial, siga estas etapas:
Crie uma instância de segunda geração. 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
.Defina uma senha de usuário raiz para a instância.
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, é possível criar e implantar um aplicativo Rails usando o Cloud SQL para MySQL. As seções a seguir orientam você na configuração, na conexão com o Cloud SQL para MySQL 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 MySQL.rails new cat_sample_app
Acesse o diretório que contém o aplicativo do Rails gerado.
cd cat_sample_app
Executar o aplicativo no local
Para executar o novo aplicativo do Rails no computador local:
Instale as dependências usando o Bundler:
bundle install
Inicie um servidor da Web local:
bundle exec bin/rails server
Em um navegador da Web, 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 MySQL com o App Engine
O Cloud SQL para MySQL é um serviço de banco de dados totalmente gerenciado para configurar, manter, gerenciar e administrar seus bancos de dados relacionais do MySQL 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 MySQL
Para começar a usar o Cloud SQL com seu aplicativo do Rails em produção, siga estas etapas:
Adicione as gems
mysql2
eappengine
ao arquivoGemfile
.bundle add mysql2 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_MYSQL_USERNAME]
representa seu nome de usuário do MySQL;[YOUR_MYSQL_PASSWORD]
representa sua senha do MySQL;[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 ao implantar no ambiente flexível do App Engine.
Como implantar o aplicativo 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 do 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 do aplicativo 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, implante uma nova versão do aplicativo do Rails descrita no arquivo app.yaml
sem redirecionar o tráfego da versão de veiculação padrão atual.
Pré-compile os ativos do Rails.
bundle exec bin/rails assets:precompile
Após a conclusão da compilação dos ativos, implante uma nova versão do aplicativo.
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 MySQL 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, acesse:
[YOUR-VERSION]-dot-[YOUR-PROJECT-ID].appspot.com
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 em:
https://[YOUR-PROJECT-ID].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.