Comienza a desarrollar apps de Ruby on Rails que se ejecuten en el entorno flexible de App Engine. Las apps que crees se ejecutarán en la misma infraestructura que impulsa todos los productos de Google, ten la confianza de que escalarán para atender a todos tus usuarios, sin importar si son unos pocos o millones.
Para este instructivo, suponemos que conoces el desarrollo web con Rails. Te guía a través de la configuración de Cloud SQL para PostgreSQL con una nueva app de Rails. También puedes usar este instructivo como referencia para configurar apps de Rails existentes a fin de usar Cloud SQL para PostgreSQL.
Para este instructivo debes tener Ruby 2.6 o 2.7.
Antes de comenzar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita Cloud SQL Admin API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Prepara una instancia de Cloud SQL para PostgreSQL
Configura una instancia de Cloud SQL para PostgreSQL a fin de usarla en este instructivo.
Crea una instancia de PostgreSQL. En este instructivo, el nombre de la instancia es
rails-cloudsql-instance
.Crea una base de datos en la instancia. En este instructivo, el nombre de la base de datos de producción es
cat_list_production
.Configura la contraseña del usuario de postgres para la instancia.
Configura el entorno local para Rails
Para configurar el entorno local en este instructivo, sigue estos pasos:
Para obtener información adicional sobre la instalación de Rails y sus dependencias, consulta la guía oficial Comenzar a usar Rails.
Una vez que completes los requisitos previos, crea e implementa una app de Rails con Cloud SQL para PostgreSQL. En las siguientes secciones, se te guiará en la configuración, la conexión a Cloud SQL para PostgreSQL y la implementación de una app.
Crea una app nueva que muestre una lista de gatos
Ejecuta el comando
rails new
si deseas crear una nueva app de Rails. Esta aplicación almacena una lista de cats en Cloud SQL para PostgreSQL.rails new cat_sample_app
Ve al directorio que contiene la app de Rails que se generó.
cd cat_sample_app
Ejecuta la app de forma local
Para ejecutar la app de Rails nueva en tu computadora local, haz lo siguiente:
Instala las dependencias con Bundler.
bundle install
Inicia un servidor web local:
bundle exec bin/rails server
En un navegador, ve a http://localhost:3000.
El mensaje: ¡Bien, ya estás en Rails! de la app se muestra en la página.
Genera un andamiaje para una lista de gatos
Genere una estructura para un recurso llamado Cat
que se usa para formar una lista de gatos con sus nombres y edades.
Genera el andamiaje.
bundle exec rails generate scaffold Cat name:string age:integer
El comando genera un modelo, un controlador y vistas para el 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
Abre el archivo
config/routes.rb
para ver el siguiente contenido generado.Agrega
root 'cats#index'
al archivo.Guarda el archivo y ciérralo.
Prueba la app de Rails como se indicó antes.
Cómo usar Cloud SQL para PostgreSQL con App Engine
Cloud SQL para PostgreSQL es un servicio de base de datos completamente administrado para configurar, mantener, controlar y administrar tus bases de datos relacionales de PostgreSQL en Google Cloud. Puedes usar Cloud SQL en una app de Rails como cualquier otra base de datos relacional.
Configura Cloud SQL para PostgreSQL
Siga estos pasos para comenzar a usar Cloud SQL con su aplicación de Rails en producción:
Agrega las gemas
pg
yappengine
al archivoGemfile
.bundle add pg bundle add appengine
Gemfile
de Rails contiene las siguientes entradasgem
adicionales:A fin de configurar la app de Rails para que se conecte con Cloud SQL, abre el archivo
config/database.yml
. Se muestran las siguientes configuraciones de base de datos estándar para SQLite:Configura el nombre de conexión de la instancia de Cloud SQL para el entorno de producción de App Engine.
Recupera el nombre de conexión de la instancia.
gcloud sql instances describe rails-cloudsql-instance
Copia el valor junto a
connectionName
.
Modifica la configuración de la base de datos de producción
database.yml
de la siguiente manera:Donde:
[YOUR_POSTGRES_USERNAME]
representa el nombre de usuario de tu instancia de Cloud SQL para PostgreSQL.[YOUR_POSTGRES_PASSWORD]
representa la contraseña de la instancia de Cloud SQL para PostgreSQL.[YOUR_INSTANCE_CONNECTION_NAME]
representa el nombre de conexión de la instancia que copiaste en el paso anterior.
Ahora, la app de Rails está configurada para usar Cloud SQL cuando se implemente en el entorno flexible de App Engine.
Cómo implementar la app en el entorno flexible de App Engine
El entorno flexible de App Engine usa un archivo llamado app.yaml para describir la configuración de implementación de una app. Si este archivo no está presente, la CLI de gcloud intenta adivinar la configuración de implementación. Sin embargo, debes definir el archivo a fin de proporcionar la configuración necesaria para la clave secreta de Rails y Cloud SQL.
A fin de configurar la app de muestra para tu implementación en App Engine, crea un archivo nuevo llamado app.yaml
en la raíz del directorio de la app de Rails y agrega lo siguiente:
Configura la clave secreta de Rails en el archivo app.yaml
Cuando se implemente una app de Rails en el entorno production
, configura la variable de entorno SECRET_KEY_BASE
con una clave secreta para proteger los datos de sesión del usuario. Esta variable de entorno se lee desde el archivo config/secrets.yml
en tu app de Rails.
Genera una clave secreta nueva.
bundle exec bin/rails secret
Copia la clave secreta generada.
Abre el archivo
app.yaml
que creaste antes y agrega una secciónenv_variables
. Elenv_variables
define variables de entorno en el entorno flexible de App Engine. El archivoapp.yaml
debería ser similar al siguiente ejemplo, en el que[SECRET_KEY]
se reemplaza por tu clave secreta.
Configura la instancia de Cloud SQL en el archivo app.yaml
A continuación, configura el entorno flexible de App Engine para usar una instancia de Cloud SQL especificada. Para ello, proporciona el nombre de conexión de la instancia de Cloud SQL en el archivo de configuración app.yaml
.
Abre el archivo
app.yaml
y agrega una nueva sección llamadabeta_settings
.Define un parámetro anidado
cloud_sql_instances
con el nombre de conexión de la instancia como el valor.El
app.yaml
debería ser similar al siguiente:
Creación de una app en el entorno flexible de App Engine
Si es la primera vez que implementas una app, debes crear una app del entorno flexible de App Engine y seleccionar la región en la que deseas ejecutar la app de Rails.
Crea una aplicación de App Engine.
gcloud app create
Selecciona una región compatible con el entorno flexible de App Engine para apps de Ruby. Obtén más información sobre las regiones y zonas.
Implementación de una versión nueva
A continuación, implementa una versión nueva de la app de Rails descrita en el archivo app.yaml
sin redireccionar el tráfico desde la versión predeterminada actualmente en uso mediante este comando:
gcloud app deploy --no-promote
La implementación puede tardar varios minutos en completarse. Espera a ver un mensaje correcto. Puedes ver las versiones implementadas en la lista de versiones de App Engine.
Después de implementar la versión nueva, si intentas acceder a esta, aparecerá el siguiente mensaje de error porque no migraste la base de datos.
Otorgamiento del permiso necesario a la gema appengine
Luego, otorga acceso a la cuenta de servicio de CloudBuild para ejecutar migraciones de bases de datos de producción con la gema appengine
.
Enumera los proyectos disponibles.
gcloud projects list
En el resultado, busca el proyecto que deseas usar para implementar tu app y copia el número del proyecto.
Agrega un miembro nuevo a la política de IAM de tu proyecto para que la función
roles/editor
ejecute migraciones de bases de datos. Reemplaza[YOUR-PROJECT-ID]
por tu ID del proyecto de Google Cloud y reemplaza[PROJECT_NUMBER]
por el número del proyecto que copiaste en el paso anterior.gcloud projects add-iam-policy-binding [YOUR-PROJECT-ID] \ --member=serviceAccount:[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com \ --role=roles/editor
Migre su base de datos de Rails
Las migraciones de bases de datos de Rails se usan para actualizar el esquema de tu base de datos sin usar la sintaxis de SQL directamente. A continuación, debes migrar tu base de datos de cat_list_production
.
La gema appengine
proporciona la tarea Rake appengine:exec
para ejecutar un comando en la versión de tu app implementada más reciente en el entorno flexible de App Engine de producción.
Migrar la base de datos
cat_list_production
de Cloud SQL para PostgreSQL en producciónbundle exec rake appengine:exec -- bundle exec rake db:migrate
Deberías ver un resultado similar a este:
---------- 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 la migración de la base de datos, ingresa la siguiente URL en tu navegador:
https://VERSION_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com
Reemplaza lo siguiente:
VERSION_ID
: Es la versión nueva de la app que implementaste antes. Para obtener una lista de las versiones, usagcloud app versions list
. El último elemento predeterminado de la versión del servicio es la implementación más reciente.PROJECT_ID
: el ID del proyecto de Google CloudREGION_ID
: un código que App Engine asigna a la app
Se muestra lo siguiente en caso de una implementación exitosa:
Migración del tráfico a la versión nueva
Por último, dirige el tráfico a la versión recién implementada con el siguiente comando:
gcloud app services set-traffic default --splits [YOUR-VERSION]=1
Ahora se puede acceder a la nueva versión de la aplicación desde la siguiente URL:
https://PROJECT_ID.REGION_ID.r.appspot.com
Lee registros de App Engine
Ahora que implementaste tu app de Rails, te recomendamos leer los registros. Puedes leer los registros de la app con el Explorador de registros ubicado en Google Cloud Console.
Obtén más información sobre cómo leer registros con la CLI de gcloud.
Limpia los recursos
Una vez que termines el instructivo, puedes limpiar los recursos que creaste para que dejen de usar la cuota y generar cargos. En las siguientes secciones, se describe cómo borrar o desactivar estos recursos.
Borrar proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, haga lo siguiente:
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra una versión de App Engine
Para borrar la versión de una aplicación, haz lo siguiente:
- En la consola de Google Cloud, ve a la página Versiones de App Engine.
- Selecciona la casilla de verificación de la versión no predeterminada de la app que deseas borrar.
- Para borrar la versión de la app, haz clic en Borrar.
Borra una instancia de Cloud SQL
Para borrar una instancia de Cloud SQL, haz lo siguiente:
- En la consola de Google Cloud, ve a la página Instancias.
- Haz clic en el nombre es la instancia de SQL que deseas borrar.
- Para borrar la instancia, haz clic en Borrar y sigue las instrucciones.