⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

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
Note

Pour 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.