Compartir comentarios
Las respuestas se generan en base a la documentación.

Utiliza contenedores para el desarrollo con Ruby on Rails

Prerrequisitos

Completa Contenerizar una aplicación de Ruby on Rails.


Resumen

En esta sección, aprenderás cómo configurar un entorno de desarrollo para tu aplicación contenerizada. Esto incluye:

  • Agregar una base de datos local y persistir datos
  • Configurar Compose para actualizar automáticamente los servicios de Compose en ejecución mientras editas y guardas tu código

Agrega una base de datos local y persiste los datos

Puedes utilizar contenedores para configurar servicios locales, como una base de datos. En esta sección, actualizarás el archivo compose.yaml para definir un servicio de base de datos y un volumen para persistir los datos.

En el directorio del repositorio clonado, abre el archivo compose.yaml en un IDE o editor de texto. Debes agregar el archivo de contraseña de la base de datos como una variable de entorno al servicio del servidor y especificar el archivo de secreto a utilizar.

El siguiente es el archivo compose.yaml actualizado.

services:
  web:
    build: .
    command: bundle exec rails s -b '0.0.0.0'
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      - RAILS_ENV=test
    env_file: "webapp.env"
  db:
    image: postgres:18
    secrets:
      - db-password
    environment:
      - POSTGRES_PASSWORD_FILE=/run/secrets/db-password
    volumes:
      - postgres_data:/var/lib/postgresql

volumes:
  postgres_data:
secrets:
  db-password:
    file: db/password.txt
Note

Para obtener más información sobre las instrucciones en el archivo Compose, consulta la referencia del archivo Compose.

Antes de ejecutar la aplicación utilizando Compose, observa que este archivo Compose especifica un archivo password.txt para contener la contraseña de la base de datos. Debes crear este archivo, ya que no está incluido en el repositorio fuente.

En el directorio del repositorio clonado, crea un nuevo directorio llamado db y, dentro de ese directorio, crea un archivo llamado password.txt que contenga la contraseña para la base de datos. Utilizando tu IDE o editor de texto favorito, agrega el siguiente contenido al archivo password.txt.

mysecretpassword

Guarda y cierra el archivo password.txt. Además, en el archivo webapp.env puedes cambiar la contraseña para conectarte a la base de datos.

Ahora deberías tener el siguiente contenido en tu directorio docker-ruby-on-rails.

.
├── Dockerfile
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── app/
├── bin/
├── compose.yaml
├── config/
├── config.ru
├── db/
│   ├── development.sqlite3
│   ├── migrate
│   ├── password.txt
│   ├── schema.rb
│   └── seeds.rb
├── lib/
├── log/
├── public/
├── storage/
├── test/
├── tmp/
└── vendor

Ahora, ejecuta el siguiente comando docker compose up para iniciar tu aplicación.

$ docker compose up --build

En Ruby on Rails, db:migrate es una tarea de Rake que se utiliza para ejecutar migraciones en la base de datos. Las migraciones son una forma de alterar la estructura del esquema de tu base de datos a lo largo del tiempo de manera consistente y sencilla.

$ docker exec -it docker-ruby-on-rails-web-1 rake db:migrate RAILS_ENV=test

Verás un mensaje similar a este:

== 20240710193146 CreateWhales: migrating =====================================
-- create_table(:whales)
   -> 0.0126s
== 20240710193146 CreateWhales: migrated (0.0127s) ============================

Actualiza http://localhost:3000 en tu navegador y agrega las ballenas (whales).

Presiona ctrl+c en la terminal para detener tu aplicación y vuelve a ejecutar docker compose up; las ballenas se mantendrán persistidas.


Actualiza automáticamente los servicios

Utiliza Compose Watch para actualizar automáticamente los servicios de Compose que se encuentran en ejecución a medida que editas y guardas tu código. Para obtener más detalles sobre Compose Watch, consulta Usar Compose Watch.

Abre tu archivo compose.yaml en un IDE o editor de texto y luego agrega las instrucciones de Compose Watch. El siguiente es el archivo compose.yaml actualizado.

services:
  web:
    build: .
    command: bundle exec rails s -b '0.0.0.0'
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      - RAILS_ENV=test
    env_file: "webapp.env"

    develop:
      watch:
        - action: rebuild
          path: .
  db:
    image: postgres:18
    secrets:
      - db-password
    environment:
      - POSTGRES_PASSWORD_FILE=/run/secrets/db-password
    volumes:
      - postgres_data:/var/lib/postgresql

volumes:
  postgres_data:
secrets:
  db-password:
    file: db/password.txt

Ejecuta el siguiente comando para iniciar tu aplicación con Compose Watch.

$ docker compose watch

Cualquier cambio en los archivos fuente de la aplicación en tu máquina local se reflejará inmediatamente en el contenedor en ejecución.

Abre docker-ruby-on-rails/app/views/whales/index.html.erb en un IDE o editor de texto y actualiza la cadena Whales agregando un signo de exclamación.

-    <h1>Whales</h1>
+    <h1>Whales!</h1>

Guarda los cambios en index.html.erb y luego espera unos segundos a que la aplicación se vuelva a compilar. Ve a la aplicación nuevamente y verifica que aparezca el texto actualizado.

Presiona ctrl+c en la terminal para detener tu aplicación.


Resumen

En esta sección, revisaste la configuración de tu archivo Compose para agregar una base de datos local y persistir datos. También aprendiste a utilizar Compose Watch para reconstruir y ejecutar automáticamente tu contenedor cuando actualizas tu código.

Información relacionada:

Próximos pasos

En la siguiente sección, aprenderás cómo puedes probar y depurar localmente tus cargas de trabajo en Kubernetes antes de realizar el despliegue.