Vamos a darle vuelta más de tuerca a nuestro ambiente de desarrollo de Ruby on Rails.
Algo más que común, es el uso de una base de datos en una aplicación web. Es algo que en la mayoría de los proyectos vamos a usar.
Como vimos en el post anterior, armamos un ambiente de desarrollo, usando la extension Remote Containers de Visual Studio Code. Pero solo teníamos el container que tiene la aplicación y usábamos SQLite como base de datos.
En este post vamos a ir un paso más y crear un ambiente con múltiples containers. La aplicación y la base de datos. Esto mismo se puede usar en caso que necesitemos Redis, o cualquier otro servicio corriendo en nuestra aplicación.
Al momento de escribir este post hay un pull request en el proyecto de los templates de Remote Containers con una configuración parecida a la que te voy a mostrar.
Probablemente cuando esto se integre al proyecto va a ser más fácil elegir este template en la lista como elegimos el de Ruby on Rails.
Manos a la obra
Para arrancar vamos a necesitar todo lo mismo que les conté en el post anterior.
Ahora, en lugar de elegir el template Ruby on Rails, vamos a elegir Docker from Docker Compose.
Esto nos va a agregar varios archivos, que vamos a cambiar casi todos y borrar algunos.
La carpeta library-scripts la borramos y el resto de los archivos los vamos a modificar.
devcontainer.json
En este archivo lo que cambio es:
- name: Ponerle un nombre más representativo en este caso Ruby on Rails + Postgres
- extensions: Poner
rebornix.Ruby
- fowardPorts: Agregar el 3000 que es donde corre Rails.
Dockerfile
Lo modifico totalmente, uso en su lugar el que se creó cuando armamos el ambiente de Ruby on Rails sin base de datos.
docker-compose.yml
En este archivo es donde pasa la magia :).
Vamos a agregar 2 servicios:
- App: Este es el mismo container que usábamos antes, que está definido en el Dockerfile, acá vamos a correr nuestra aplicación.
- Db: Este es el container de la base de datos.
Nota: Como te decía más arriba aca podrias poner los servicios que quisieras, Redis, adminer, etc.
Turn on the engines
Ahora estamos listos para arrancar los motores, nuevamente buscamos en la opciones de Remote Container, Reopen in Container.
Ahora vamos a crear una aplicación de rails, pero usando postgres
rails new myapp --database=postgresql
En el archivo de configuración de la base de datos (config/database.yml
), agregamos el host, user y password a la sección default.
Nota: Dentro de Docker para comunicarnos con otros servicios, la URL que usamos es el nombre del servicio. En este caso el host que vamos a usar en nuestra aplicación va a ser db.
Probemos la DB
Para poder probar la base de datos, vamos a crear algo en Rails para usarla. Para eso usamos el generator de Rails, para crear un CRUD, en este caso de Clientes.
rails g scaffold Customer name:string address:string
Ahora si , tenemos migraciones, entonces ejecutamos
rails db:create db:migrate
Ahora si podemos entrar a http://localhost:3000/customers y probar nuestra app, creando, editando y borrando clientes.
Espero que les sirva y lo puedan usar.
Nos leemos!