Compilación de una aplicación Ruby y Postgres en Azure App Service en Linux
Azure App Service proporciona un servicio de hospedaje web muy escalable y con aplicación de revisiones de un modo automático. En este tutorial se muestra cómo crear una aplicación Ruby y conectarla a una base de datos PostgreSQL. Cuando haya terminado, tendrá una aplicación Ruby on Rails que se ejecuta en App Service en Linux.
En este tutorial, aprenderá a:
- Creación de una base de datos PostgreSQL en Azure
- Conectar una aplicación Ruby on Rails a PostgreSQL
- Implementar la aplicación en Azure
- Actualizar el modelo de datos y volver a implementar la aplicación
- Transmitir registros de diagnóstico desde Azure
- Administrar la aplicación en Azure Portal
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Requisitos previos
Para completar este tutorial:
- Instalación de Git
- Instalación de Ruby 2.6
- Instalación de Ruby on Rails 5.1
- Instalación y ejecución de PostgreSQL
Use el entorno de Bash en Azure Cloud Shell.
Si lo prefiere, instale la CLI de Azure para ejecutar sus comandos de referencia.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
Cuando se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
Preparación de Postgres local
En este paso, creará una base de datos en el servidor Postgres local para usarlo en este tutorial.
Conexión con el servidor Postgres local
Abra la ventana del terminal y ejecute
psqlpara conectarse al servidor de Postgres local.sudo -u postgres psqlSi la conexión se realiza correctamente, significa que la base de datos Postgres está en ejecución. De lo contrario, asegúrese de que se ha iniciado la base de datos Postgres local, para lo que debe seguir los pasos que se indican en Downloads - PostgreSQL Core Distribution (Descargas: Distribución del núcleo de PostgreSQL).
Escriba
\qpara salir del cliente de Postgres.Cree un usuario Postgres que pueda crear bases de datos ejecutando el siguiente comando, usando el nombre de usuario con el que haya iniciado la sesión de Linux.
sudo -u postgres createuser -d <signed-in-user>
Creación de una aplicación Ruby on Rails local
En este paso, obtendrá una aplicación Ruby on Rails de ejemplo, configurará la conexión a base de datos correspondiente y la ejecutará de forma local.
Clonación del ejemplo
En la ventana del terminal, use
cdpara cambiar a un directorio de trabajo.Clone el repositorio de ejemplo y cambie a la raíz del repositorio.
git clone https://github.com/Azure-Samples/rubyrails-tasks.git cd rubyrails-tasksAsegúrese de que la rama predeterminada sea
main.git branch -m mainSugerencia
En App Service, no es obligatorio cambiar el nombre de la rama. Sin embargo, como muchos repositorios están cambiando la rama predeterminada a
main, en este tutorial veremos también cómo implementar un repositorio desdemain. Para más información, consulte Cambiar la rama de implementación.Instale los paquetes requeridos.
bundle install --path vendor/bundle
Ejecución local del código
Ejecute las migraciones de Rails para crear las tablas que necesita la aplicación. Para ver qué tablas se crean en las migraciones, mire en el directorio db/migrate del repositorio de Git.
rake db:create rake db:migrateEjecute la aplicación.
rails serverVaya a
http://localhost:3000en un explorador. Agregue algunas tareas a la página.
Para detener el servidor Rails, escriba
Ctrl + Cen el terminal.
Creación de Postgres en Azure
En este paso, creará una base de datos Postgres en Azure Database for PostgreSQL. Posteriormente, configurará la aplicación Ruby on Rails para que se conecte a esta base de datos.
Crear un grupo de recursos
Un grupo de recursos es un contenedor lógico en el que los recursos de Azure, como aplicaciones web, bases de datos y cuentas de almacenamiento, se implementen y administren. Por ejemplo, más adelante puede elegir eliminar todo el grupo de recursos en un solo paso.
En Cloud Shell, cree un grupo de recursos con el comando az group create. En el ejemplo siguiente, se crea un grupo de recursos denominado myResourceGroup en la ubicación Oeste de Europa. Para ver todas las ubicaciones de App Service que se admiten en Linux en el nivel Básico, ejecute el comando az appservice list-locations --sku B1 --linux-workers-enabled.
az group create --name myResourceGroup --location "West Europe"
Generalmente se crean el grupo de recursos y los recursos en una región cercana.
Cuando finaliza el comando, una salida de JSON muestra las propiedades del grupo de recursos.
Creación de una base de datos de Postgres en Azure
Instale la extensión
db-upcon el siguiente comando:az extension add --name db-upCree la base de datos Postgres en Azure con el comando
az postgres up, como se muestra en el ejemplo siguiente. Reemplace <postgresql-name> con un nombre único (el punto de conexión del servidor es https://<postgresql-name>.postgres.database.azure.com). Para <admin-username> y <admin-password> , especifique las credenciales para crear un usuario administrador de este servidor Postgres.az postgres up --resource-group myResourceGroup --location westeurope --server-name <postgresql-name> --database-name sampledb --admin-user <admin-username> --admin-password <admin-password> --ssl-enforcement EnabledEste comando puede tardar un poco porque está llevando a cabo las siguientes operaciones:
- Crea un grupo de recursos denominado
myResourceGroup, si no existe. Cada recurso de Azure debe estar incluido en uno de ellos.--resource-groupes opcional. - Crea un servidor de Postgres con el usuario administrativo.
- Crea una base de datos
sampledb. - Permite el acceso desde la dirección IP local.
- Permite el acceso desde servicios de Azure.
- Crea un usuario de base de datos con acceso a la base de datos
sampledb.
Puede realizar todos los pasos por separado con otros comandos de
az postgresypsql, peroaz postgres uprealiza todos ellos de una vez.Cuando finalice el comando, busque las líneas de salida que empiecen por
Ran Database Query:. Muestran el usuario de base de datos que se crea automáticamente, con el nombre de usuariorooty la contraseñaSampledb1. Los usará más adelante para conectar la aplicación a la base de datos.Sugerencia
--location <location-name>, se puede establecer en cualquiera de las regiones de Azure. Puede obtener las regiones disponibles para su suscripción con el comandoaz account list-locations. En el caso de las aplicaciones de producción, coloque la base de datos y la aplicación en la misma ubicación.- Crea un grupo de recursos denominado
Conexión de una aplicación a Azure Postgres
En este paso, conectará la aplicación Ruby on Rails a la base de datos Postgres que creó en Azure Database for PostgreSQL.
Configuración de la conexión de base de datos
En el repositorio, abra config/database.yml. En la parte inferior del archivo, reemplace las variables de producción por el código siguiente.
production:
<<: *default
host: <%= ENV['DB_HOST'] %>
database: <%= ENV['DB_DATABASE'] %>
username: <%= ENV['DB_USERNAME'] %>
password: <%= ENV['DB_PASSWORD'] %>
Guarde los cambios.
Prueba de la aplicación de forma local
En el terminal local, establezca las variables de entorno siguientes:
export DB_HOST=<postgres-server-name>.postgres.database.azure.com export DB_DATABASE=sampledb export DB_USERNAME=root@<postgres-server-name> export DB_PASSWORD=Sampledb1Ejecute migraciones de bases de datos Rails con los valores de producción que acaba de configurar para crear las tablas de la base de datos Postgres en Azure Database for PostgreSQL.
rake db:migrate RAILS_ENV=productionCuando se ejecuta en el entorno de producción, la aplicación Rails necesita recursos precompilados. Genere los recursos necesarios con el comando siguiente:
rake assets:precompileEl entorno de producción Rails también usa secretos para administrar la seguridad. Genere una clave secreta.
rails secretGuarde la clave secreta en las variables respectivas que usa el entorno de producción Rails. Para mayor comodidad, se usa la misma clave para ambas variables.
export RAILS_MASTER_KEY=<output-of-rails-secret> export SECRET_KEY_BASE=<output-of-rails-secret>Habilite el entorno de producción Rails para atender archivos JavaScript y CSS.
export RAILS_SERVE_STATIC_FILES=trueEjecute la aplicación de ejemplo en el entorno de producción.
rails server -e productionVaya a
http://localhost:3000. Si la página se carga sin errores, significa que la aplicación Ruby on Rails se está conectado a la base de datos Postgres en Azure.Agregue algunas tareas a la página.

Para detener el servidor Rails, escriba
Ctrl + Cen el terminal.
Confirmación de los cambios
Ejecute los siguientes comandos de Git para confirmar los cambios:
git add . git commit -m "database.yml updates"
La aplicación está lista para implementarse.
Implementar en Azure
En este paso se implementará la aplicación Rails conectada a Postgres en Azure App Service.
Configuración de un usuario de implementación
Se puede implementar FTP y Git local en una aplicación web de Azure mediante un usuario de implementación. Una vez configurado este usuario de implementación, podrá usarlo en todas las implementaciones de Azure. El nombre de usuario y la contraseña en el nivel de cuenta son diferentes de las credenciales de suscripción de Azure.
Para configurar el usuario de implementación, ejecute el comando az webapp deployment user set en Azure Cloud Shell. Reemplace <username> y <password> por un nombre de usuario y una contraseña de usuario de implementación.
- El nombre de usuario debe ser único dentro de Azure y no debe contener el símbolo "@" para las inserciones de Git local.
- La contraseña debe tener al menos ocho caracteres y dos de los tres elementos siguientes: letras, números y símbolos.
az webapp deployment user set --user-name <username> --password <password>
La salida JSON muestra la contraseña como null. Si se produce un error 'Conflict'. Details: 409, cambie el nombre de usuario. Si se produce un error 'Bad Request'. Details: 400, use una contraseña más segura.
Anote el nombre de usuario y la contraseña que se usarán para implementar las aplicaciones web.
Creación de un plan de App Service
En Cloud Shell, cree un plan de App Service con el comando az appservice plan create.
En el siguiente ejemplo se crea un plan de App Service denominado myAppServicePlan con el plan de tarifa Gratis:
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE --is-linux
Cuando se crea el plan de App Service, la CLI de Azure muestra información similar al ejemplo siguiente:
{
"freeOfferExpirationTime": null,
"geoRegion": "West Europe",
"hostingEnvironmentProfile": null,
"id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
"kind": "linux",
"location": "West Europe",
"maximumNumberOfWorkers": 1,
"name": "myAppServicePlan",
< JSON data removed for brevity. >
"targetWorkerSizeId": 0,
"type": "Microsoft.Web/serverfarms",
"workerTierName": null
}
Creación de una aplicación web
Cree una aplicación web en el plan de App Service de myAppServicePlan.
En Cloud Shell, puede usar el comando az webapp create. En el siguiente ejemplo, reemplace <app-name> por un nombre único global de aplicación (los caracteres válidos son a-z, 0-9 y -). El tiempo de ejecución se establece en RUBY|2.6.2. Para ver todos los entornos en tiempo de ejecución admitidos, ejecute az webapp list-runtimes --linux.
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime 'RUBY|2.6.2' --deployment-local-git
Cuando se haya creado la aplicación web, la CLI de Azure mostrará información similar a la del ejemplo siguiente:
Local git is configured with url of 'https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git'
{
"availabilityState": "Normal",
"clientAffinityEnabled": true,
"clientCertEnabled": false,
"cloningInfo": null,
"containerSize": 0,
"dailyMemoryTimeQuota": 0,
"defaultHostName": "<app-name>.azurewebsites.net",
"deploymentLocalGitUrl": "https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git",
"enabled": true,
< JSON data removed for brevity. >
}
Ha creado una nueva aplicación web vacía, con la implementación de Git habilitada.
Nota
La dirección URL del repositorio de Git remoto se muestra en la propiedad deploymentLocalGitUrl, con el formato https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git. Guarde esta dirección URL, ya que la necesitará más adelante.
Configuración de la base de datos
En App Service, las variables de entorno se establecen como valores de aplicación mediante el comando az webapp config appsettings set en Cloud Shell.
El siguiente comando Cloud Shell permite configurar los valores de aplicación DB_HOST, DB_DATABASE, DB_USERNAME y DB_PASSWORD. Reemplace los marcadores de posición <appname> y <postgres-server-name> .
az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DB_HOST="<postgres-server-name>.postgres.database.azure.com" DB_DATABASE="sampledb" DB_USERNAME="root@<postgres-server-name>" DB_PASSWORD="Sampledb1"
Configuración de las variables de entorno de Rails
En el terminal local, genere un secreto nuevo para el entorno de producción de Rails en Azure.
rails secretEn el comando Cloud Shell siguiente, reemplace los dos marcadores de posición <output-of-rails-secret> por la clave secreta nueva que generó en el terminal local.
az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings RAILS_MASTER_KEY="<output-of-rails-secret>" SECRET_KEY_BASE="<output-of-rails-secret>" RAILS_SERVE_STATIC_FILES="true" ASSETS_PRECOMPILE="true"ASSETS_PRECOMPILE="true"indica al contenedor Ruby predeterminado que precompile los recursos en cada implementación de Git. Para obtener más información, consulte Precompile assets (Precompilación de los recursos) y Serve static assets (Servir recursos estáticos).
Inserción en Azure desde Git
Puesto que va a implementar la rama
main, debe establecer la rama de implementación predeterminada de la aplicación de App Service enmain(consulte Cambiar la rama de implementación). En Cloud Shell, establezca el valor de la aplicaciónDEPLOYMENT_BRANCHcon el comandoaz webapp config appsettings set.az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'En el terminal local, agregue una instancia remota de Azure al repositorio de Git local.
git remote add azure <paste-copied-url-here>Insértela en la instancia remota de Azure para implementar la aplicación Ruby on Rails. Se le pedirá la contraseña que especificó anteriormente como parte de la creación del usuario de implementación.
git push azure mainDurante la implementación, Azure App Service comunicará su progreso con Git.
Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: Updating branch 'main'. remote: Updating submodules. remote: Preparing deployment for commit id 'a5e076db9c'. remote: Running custom deployment command... remote: Running deployment command... ... < Output has been truncated for readability >
Navegación hasta la aplicación de Azure
Vaya a http://<app-name>.azurewebsites.net y agregue algunas tareas a la lista.
Ya está ejecutando una aplicación Ruby on Rails orientada a datos en Azure App Service.
Actualización local del modelo y nueva implementación
En este paso, se realiza un cambio sencillo en el modelo de datos task y en la aplicación web y, después, se publica la actualización en Azure.
Para el escenario de las tareas, modifique la aplicación de forma que pueda marcar una tarea como completada.
Adición de una columna
En el terminal, navegue a la raíz del repositorio de Git.
Genere una migración nueva que agregue una columna booleana llamada
Doneen la tablaTasks:rails generate migration AddDoneToTasks Done:booleanEste comando genera un archivo de migración nuevo en el directorio db/migrate.
En el terminal, ejecute migraciones de base de datos de Rails para realizar el cambio en la base de datos local.
rake db:migrate
Actualización de la lógica de aplicación
Abra el archivo app/controllers/tasks_controller.rb. Busque esta línea al final del archivo:
params.require(:task).permit(:Description)Modifique esta línea para incluir el parámetro
Donenuevo.params.require(:task).permit(:Description, :Done)
Actualización de las vistas
Abra el archivo app/views/tasks/_form.html.erb, que es el formulario Edición.
Busque la línea
<%=f.error_span(:Description) %>e inserte el código siguiente directamente debajo de ella:<%= f.label :Done, :class => 'control-label col-lg-2' %> <div class="col-lg-10"> <%= f.check_box :Done, :class => 'form-control' %> </div>Abra el archivo app/views/tasks/show.html.erb, que es la página Vista de un solo registro.
Busque la línea
<dd><%= @task.Description %></dd>e inserte el código siguiente directamente debajo de ella:<dt><strong><%= model_class.human_attribute_name(:Done) %>:</strong></dt> <dd><%= check_box "task", "Done", {:checked => @task.Done, :disabled => true}%></dd>Abra el archivo app/views/tasks/index.html.erb, que es la página de índice para todos los registros.
Busque la línea
<th><%= model_class.human_attribute_name(:Description) %></th>e inserte el código siguiente directamente debajo de ella:<th><%= model_class.human_attribute_name(:Done) %></th>En el mismo archivo, busque la línea
<td><%= task.Description %></td>e inserte el código siguiente directamente debajo de ella:<td><%= check_box "task", "Done", {:checked => task.Done, :disabled => true} %></td>
Prueba local de los cambios
En el terminal local, ejecute el servidor Rails.
rails serverPara ver el cambio del estado de la tarea, navegue a
http://localhost:3000y agregue o edite los elementos.
Para detener el servidor Rails, escriba
Ctrl + Cen el terminal.
Publicación de los cambios en Azure
En el terminal, ejecute las migraciones de bases de datos Rails para el entorno de producción para hacer el cambio en la base de datos de Azure.
rake db:migrate RAILS_ENV=productionConfirme todos los cambios en Git y, después, inserte los cambios en el código en Azure.
git add . git commit -m "added complete checkbox" git push azure mainUna vez que
git pushesté completo, vaya a la aplicación de Azure y pruebe la nueva funcionalidad.
Si ha agregado tareas, estas se conservarán en la base de datos. Las actualizaciones que efectúe en el esquema de datos dejan los datos existentes intactos.
Transmisión de registros de diagnóstico
Para acceder a los registros de la consola generados desde el código de la aplicación en App Service, active el registro de diagnósticos, para lo que debe ejecutar el siguiente comando en Cloud Shell:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Los valores posibles de --level son: Error, Warning, Info y Verbose. Todos los niveles incluyen el nivel anterior. Por ejemplo: Error incluye solo los mensajes de error, mientras que Verbose incluye todos los mensajes.
Una vez que se activa el registro de contenedor, ejecute el siguiente comando para ver la transmisión del registro:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Si no ve los registros de la consola de inmediato, vuelve a comprobarlo en 30 segundos.
Nota
También puede inspeccionar los archivos de registro desde el explorador en https://<app-name>.scm.azurewebsites.net/api/logs/docker.
Para detener el streaming del registro en cualquier momento, escriba Ctrl+C.
Administración de la aplicación de Azure
Vaya a Azure Portal para administrar la aplicación que ha creado.
En el menú izquierdo, haga clic en App Services y, luego, en el nombre de la aplicación de Azure.

Verá la página de información general de la aplicación. Aquí se pueden realizar tareas de administración básicas como detener, iniciar, reiniciar, examinar y eliminar.
El menú izquierdo proporciona varias páginas para configurar la aplicación.

Limpieza de recursos
En los pasos anteriores, creó recursos de Azure en un grupo de recursos. Si prevé que no necesitará estos recursos en el futuro, elimine el grupo de recursos ejecutando el siguiente comando en Cloud Shell:
az group delete --name myResourceGroup
Este comando puede tardar varios segundos en ejecutarse.
Pasos siguientes
En este tutorial, ha aprendido a:
- Crear una base de datos de Postgres en Azure
- Conectar una aplicación Ruby on Rails a Postgres
- Implementar la aplicación en Azure
- Actualizar el modelo de datos y volver a implementar la aplicación
- Transmitir registros de diagnóstico desde Azure
- Administrar la aplicación en Azure Portal
Vaya al siguiente tutorial para aprender a asignar un nombre DNS personalizado a una aplicación web.
O bien, eche un vistazo a otros recursos:
Configure Ruby app (Configuración de una aplicación de Ruby)
