Utiliser des conteneurs pour le développement Ruby on Rails
Prérequis
Terminez Conteneuriser une application Ruby on Rails.
Aperçu
Dans cette section, vous apprendrez à mettre en place un environnement de développement pour votre application conteneurisée. Cela inclut :
- Ajouter une base de données locale et persister les données
- Configurer Compose pour mettre à jour automatiquement vos services Compose en cours d'exécution lorsque vous modifiez et enregistrez votre code
Ajouter une base de données locale et persister les données
Vous pouvez utiliser des conteneurs pour configurer des services locaux, comme une base de données. Dans cette section, vous mettrez à jour le fichier compose.yaml
pour définir un service de base de données et un volume pour persister les données.
Dans le répertoire du dépôt cloné, ouvrez le fichier compose.yaml
dans un IDE ou un éditeur de texte. Vous devez ajouter le fichier de mot de passe de la base de données comme variable d'environnement au service serveur et spécifier le fichier secret à utiliser.
Voici le fichier compose.yaml
mis à jour.
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:latest
secrets:
- db-password
environment:
- POSTGRES_PASSWORD_FILE=/run/secrets/db-password
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
secrets:
db-password:
file: db/password.txt
NotePour en savoir plus sur les instructions dans le fichier Compose, consultez la référence du fichier Compose.
Avant d'exécuter l'application avec Compose, notez que ce fichier Compose spécifie un fichier password.txt
pour contenir le mot de passe de la base de données. Vous devez créer ce fichier car il n'est pas inclus dans le dépôt source.
Dans le répertoire du dépôt cloné, créez un nouveau répertoire nommé db
et à l'intérieur de ce répertoire, créez un fichier nommé password.txt
qui contient le mot de passe de la base de données. En utilisant votre IDE ou éditeur de texte préféré, ajoutez le contenu suivant au fichier password.txt
.
mysecretpassword
Enregistrez et fermez le fichier password.txt
. De plus, dans le fichier webapp.env
, vous pouvez changer le mot de passe pour vous connecter à la base de données.
Vous devriez maintenant avoir le contenu suivant dans votre répertoire 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
Maintenant, exécutez la commande docker compose up
suivante pour démarrer votre application.
$ docker compose up --build
Dans Ruby on Rails, db:migrate
est une tâche Rake qui est utilisée pour exécuter des migrations sur la base de données. Les migrations sont un moyen de modifier la structure de votre schéma de base de données au fil du temps de manière cohérente et simple.
$ docker exec -it docker-ruby-on-rails-web-1 rake db:migrate RAILS_ENV=test
Vous verrez un message similaire à celui-ci :
console == 20240710193146 CreateWhales: migration en cours ===================================== -- create_table(:whales) -> 0.0126s == 20240710193146 CreateWhales: migré (0.0127s) ============================
Actualisez http://localhost:3000 dans votre navigateur et ajoutez les baleines.
Appuyez sur ctrl+c
dans le terminal pour arrêter votre application et exécutez docker compose up
à nouveau, les baleines sont persistées.
Mettre à jour automatiquement les services
Utilisez Compose Watch pour mettre à jour automatiquement vos services Compose en cours d'exécution lorsque vous modifiez et enregistrez votre code. Pour plus de détails sur Compose Watch, consultez Utiliser Compose Watch.
Ouvrez votre fichier compose.yaml
dans un IDE ou un éditeur de texte, puis ajoutez les instructions de Compose Watch. Voici le fichier compose.yaml
mis à jour.
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:latest
secrets:
- db-password
environment:
- POSTGRES_PASSWORD_FILE=/run/secrets/db-password
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
secrets:
db-password:
file: db/password.txt
Exécutez la commande suivante pour exécuter votre application avec Compose Watch.
$ docker compose watch
Toute modification des fichiers sources de l'application sur votre machine locale sera désormais immédiatement répercutée dans le conteneur en cours d'exécution.
Ouvrez docker-ruby-on-rails/app/views/whales/index.html.erb
dans un IDE ou un éditeur de texte et mettez à jour la chaîne Whales
en ajoutant un point d'exclamation.
- <h1>Whales</h1>
+ <h1>Baleines !</h1>
Enregistrez les modifications dans index.html.erb
, puis attendez quelques secondes que l'application se reconstruise. Allez à nouveau sur l'application et vérifiez que le texte mis à jour apparaît.
Appuyez sur ctrl+c
dans le terminal pour arrêter votre application.
Résumé
Dans cette section, vous avez examiné la configuration de votre fichier Compose pour ajouter une base de données locale et persister les données. Vous avez également appris à utiliser Compose Watch pour reconstruire et exécuter automatiquement votre conteneur lorsque vous mettez à jour votre code.
Informations connexes :
Prochaines étapes
Dans la section suivante, vous apprendrez comment vous pouvez tester et déboguer localement vos charges de travail sur Kubernetes avant de les déployer.