Comment utiliser PostgreSQL avec votre application Ruby on Rails sur Ubuntu 20.04

Introduction

Lors de l’utilisation du framework web Ruby on Rails, votre application utilisera SQLite comme base de données par défaut. SQLite est une base de données relationnelle légère, portable et conviviale qui fonctionne particulièrement bien dans des environnements à faible mémoire, elle convient donc à de nombreux cas. Cependant, pour des applications hautement complexes nécessitant une intégrité des données plus fiable et une extensibilité programmatique, une base de données PostgreSQL sera un choix plus robuste et flexible. Vous devrez effectuer des étapes supplémentaires pour configurer votre installation Ruby on Rails afin d’utiliser PostgreSQL.

Dans ce tutoriel, vous configurerez un environnement de développement Ruby on Rails connecté à une base de données PostgreSQL sur un serveur Ubuntu 20.04. Vous installerez et configurerez PostgreSQL, puis testerez votre configuration en créant une application Rails qui utilise PostgreSQL comme serveur de base de données.

Prérequis

Ce tutoriel nécessite les éléments suivants :

Étape 1 – Installation de PostgreSQL

Pour configurer Ruby on Rails avec PostgreSQL comme base de données pour votre application web, vous installerez d’abord la base de données sur votre serveur.

En utilisant les privilèges sudo, mettez à jour l’index des packages APT pour vous assurer que vos référentiels sont à jour :

  1. sudo apt update

Ensuite, installez PostgreSQL et ses bibliothèques de développement :

  1. sudo apt install postgresql postgresql-contrib libpq-dev

Dans la commande précédente, le paquet postgresql contient le programme principal de PostgreSQL, tandis que postgresql-contrib ajoute plusieurs fonctionnalités à PostgreSQL pour étendre ses capacités. libpq-dev est une bibliothèque PostgreSQL permettant aux clients d’envoyer des requêtes et de recevoir des réponses du serveur en arrière-plan, ce qui permet à votre application de communiquer avec sa base de données.

Une fois que PostgreSQL et ses dépendances sont installés, la prochaine étape consiste à créer un rôle que votre application Rails utilisera ultérieurement pour créer votre base de données.

Étape 2 – Création d’un nouveau rôle de base de données

Dans PostgreSQL, les rôles peuvent être utilisés pour organiser les autorisations et l’authentification de la même manière que les utilisateurs le font sous Linux. À cette étape, vous créerez un nouveau rôle de superutilisateur pour votre nom d’utilisateur Linux, ce qui vous permettra de créer et de configurer des bases de données dans le système PostgreSQL.

Pour créer un rôle de superutilisateur PostgreSQL, exécutez la commande suivante en remplaçant le mot surligné par votre nom d’utilisateur Ubuntu 20.04:

  1. sudo -u postgres createuser -s sammy -P

Comme vous avez spécifié le drapeau -P, on vous demandera d’entrer un mot de passe pour votre nouveau rôle. Entrez le mot de passe souhaité, en veillant à le noter pour pouvoir l’utiliser dans un fichier de configuration à une étape ultérieure.

Vous utilisez createuser pour créer un rôle nommé sammy (ou le nom d’utilisateur de votre choix). Le drapeau -s accorde à cet utilisateur des privilèges de super utilisateur, et sudo -u vous permet d’exécuter la commande depuis le compte postgres qui est automatiquement créé lors de l’installation de PostgreSQL.

Remarque : Étant donné que le mode d’authentification de PostgreSQL sur Ubuntu commence par défaut en tant que ident, par défaut, un utilisateur Ubuntu ne peut opérer dans PostgreSQL qu’avec un rôle du même nom. Pour plus d’informations, consultez la documentation officielle de PostgreSQL sur l’authentification.

Si vous n’avez pas utilisé le drapeau -P et que vous souhaitez définir un mot de passe pour le rôle après sa création, entrez dans la console PostgreSQL avec la commande suivante :

  1. sudo -u postgres psql

Vous recevrez la sortie suivante, ainsi que l’invite pour la console PostgreSQL :

Output
psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1)) Type "help" for help. postgres=#

La console PostgreSQL est indiquée par l’invite postgres=#. À l’invite PostgreSQL, saisissez cette commande pour définir le mot de passe du nouveau rôle de base de données, en remplaçant le nom surligné par celui que vous avez créé :

  1. \password sammy

PostgreSQL vous demandera un mot de passe. Entrez le mot de passe souhaité à l’invite, puis confirmez-le.

Maintenant, quittez la console PostgreSQL en saisissant cette commande :

  1. \q

Votre invite habituelle réapparaîtra maintenant.

À cette étape, vous avez créé un nouveau rôle PostgreSQL avec des privilèges de super utilisateur. Vous êtes maintenant prêt à créer une nouvelle application Rails qui utilise ce rôle pour créer une base de données.

Étape 3 – Création d’une nouvelle application Rails

Avec un rôle configuré pour PostgreSQL, vous pouvez maintenant créer une nouvelle application Rails configurée pour utiliser PostgreSQL comme base de données.

Tout d’abord, accédez à votre répertoire personnel :

  1. cd ~

Créez une nouvelle application Rails dans ce répertoire, en remplaçant appname par le nom que vous souhaitez donner à votre application :

  1. rails new appname -d=postgresql

L’option -d=postgresql configure PostgreSQL comme base de données.

Une fois que vous avez exécuté cette commande, un nouveau dossier nommé appname apparaîtra dans votre répertoire personnel, contenant tous les éléments d’une application Rails de base.

Ensuite, déplacez-vous dans le répertoire de l’application :

  1. cd appname

Maintenant que vous avez créé une nouvelle application Rails et que vous vous êtes déplacé dans le répertoire racine de votre projet, vous pouvez configurer et créer votre base de données PostgreSQL depuis votre application Rails.

Étape 4 – Configuration et création de votre base de données

Lors de la création des bases de données development et test pour votre application, Rails utilisera le rôle PostgreSQL que vous avez créé pour votre nom d’utilisateur Ubuntu. Pour garantir que Rails crée ces bases de données, vous allez modifier le fichier de configuration de la base de données de votre projet. Ensuite, vous allez créer vos bases de données.

Un des changements de configuration à apporter à votre application Rails est d’ajouter le mot de passe du rôle PostgreSQL créé à la dernière étape. Pour protéger des informations sensibles telles que les mots de passe, il est recommandé de stocker le mot de passe dans une variable d’environnement plutôt que de l’écrire directement dans votre fichier de configuration.

Pour stocker votre mot de passe dans une variable d’environnement lors de la connexion, exécutez la commande suivante, en remplaçant APPNAME par le nom de votre application et PostgreSQL_Role_Password par le mot de passe que vous avez créé à la dernière étape:

  1. echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bashrc

Cette commande écrit la commande export dans votre fichier ~/.bashrc afin que la variable d’environnement soit définie lors de la connexion.

Pour exporter la variable pour votre session actuelle, utilisez la commande source:

  1. source ~/.bashrc

Maintenant que vous avez stocké votre mot de passe dans votre environnement, vous pouvez modifier le fichier de configuration.

Ouvrez le fichier de configuration de la base de données de votre application dans votre éditeur de texte préféré. Ce tutoriel utilisera nano:

  1. nano config/database.yml

Sous la section default, trouvez la ligne qui dit pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> et ajoutez les lignes en surbrillance suivantes, en remplissant vos informations d’identification et la variable d’environnement que vous avez créée. Il devrait ressembler à ceci:

config/database.yml
...
default: &default
  adapter: postgresql
  encoding: unicode
  # Pour plus de détails sur le regroupement de connexions, consultez le guide de configuration de Rails
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: sammy
password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>

development:
  <<: *default
  database: appname_development
...

Cette mise à jour permettra à l’application Rails de faire fonctionner la base de données avec le rôle et le mot de passe corrects. Enregistrez et quittez en appuyant sur CTRL + x, Y, puis ENTER.

Pour plus d’informations sur la configuration des bases de données dans Rails, consultez la documentation Rails.

Maintenant que vous avez apporté des modifications à config/database.yml, créez les bases de données de votre application en utilisant la commande rails:

  1. rails db:create

Une fois Rails crée la base de données, vous recevrez la sortie suivante:

Output
Created database 'appname_development' Created database 'appname_test'

Comme le suggère la sortie, cette commande a créé une base de données development et test dans votre serveur PostgreSQL.

Vous avez maintenant une base de données PostgreSQL connectée à votre application Rails. Pour vous assurer que votre application fonctionne, vous allez maintenant tester votre configuration.

Étape 5 – Tester Votre Configuration

Pour tester si votre application peut utiliser la base de données PostgreSQL, lancez votre application web pour qu’elle s’affiche dans un navigateur.

En utilisant la commande rails server, lancez votre application web sur le serveur web intégré dans votre application Rails, Puma:

  1. rails server --binding=127.0.0.1

--binding lie votre application à une adresse IP spécifiée. Par défaut, ce drapeau lie Rails à 0.0.0.0, ce qui signifie que Rails écoutera toutes les interfaces. Il est plus sécurisé d’utiliser 127.0.0.1 pour spécifier le localhost. Par défaut, l’application écoute sur le port 3000.

Une fois que votre application Rails est en cours d’exécution, votre invite de commande disparaîtra, remplacée par cette sortie :

Output
=> Booting Puma => Rails 7.0.4 application starting in development => Run `bin/rails server --help` for more startup options Puma starting in single mode... * Puma Version 5.6.5 (ruby 3.1.2-p20) ("Birdie's Version") * Min threads: 5 * Max threads: 5 * Environment: development * Listening on tcp://127.0.0.1:3000 Use Ctrl-C to stop

Pour tester si votre application fonctionne, ouvrez une nouvelle fenêtre de terminal sur votre serveur et utilisez la commande curl pour envoyer une requête à 127.0.0.1:3000 :

  1. curl http://127.0.0.1:3000

Vous recevrez beaucoup de sortie en HTML, se terminant par quelque chose comme :

Output
... <strong>Rails version:</strong> 7.0.4<br /> <strong>Ruby version:</strong> 3.1.2 (x86_64-linux) </p> </section> </div> </body> </html>

Si votre application Rails est sur un serveur distant et que vous souhaitez y accéder via un navigateur web, vous pouvez la lier à l’adresse IP publique de votre serveur. Tout d’abord, ouvrez le port 3000 dans votre pare-feu :

  1. sudo ufw allow 3000

Ensuite, recherchez l’adresse IP publique de votre serveur. Vous pouvez le faire en exécutant la commande curl suivante :

  1. curl http://icanhazip.com

Cela renverra votre adresse IP publique. Utilisez-la avec la commande rails server, en remplaçant server_public_IP par l’IP publique de votre serveur :

  1. rails server --binding=server_public_IP

Maintenant, vous pourrez accéder à votre application Rails dans un navigateur web local via l’adresse IP publique du serveur sur le port 3000 en visitant :

http://server_public_IP:3000

À cette URL, vous trouverez une page Ruby on Rails :

Si vous pouvez accéder à la page d’accueil, votre application est correctement configurée et connectée à la base de données PostgreSQL.

Après avoir testé la configuration, si vous souhaitez fermer le port 3000, utilisez la commande suivante.

  1. sudo ufw delete allow 3000

Conclusion

Dans ce tutoriel, vous avez créé une application web Ruby on Rails configurée pour utiliser PostgreSQL comme base de données sur un serveur Ubuntu 20.04. Si vous souhaitez en savoir plus sur le langage de programmation Ruby, consultez notre série sur Comment Coder en Ruby.

Pour plus d’informations sur le choix d’une base de données pour votre application, consultez notre tutoriel sur les différences et les cas d’utilisation de SQLite, PostgreSQL et MySQL. Si vous souhaitez en savoir plus sur l’utilisation des bases de données, consultez l’article Introduction aux Requêtes dans PostgreSQL, ou explorez le produit Bases de Données Gérées de DigitalOcean.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-ruby-on-rails-application-on-ubuntu-20-04