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 :
-
Un serveur Ubuntu 20.04 configuré en suivant le Guide de configuration initiale du serveur pour Ubuntu 20.04, comprenant un utilisateur non root avec des privilèges sudo et un pare-feu.
-
Un environnement de développement Ruby on Rails installé sur votre serveur Ubuntu 20.04. Pour le configurer, suivez le Guide d’installation de Ruby on Rails avec rbenv sur Ubuntu 20.04. Ce tutoriel utilisera la version 3.1.2 de Ruby et la version 7.0.4 de Rails ; pour des informations sur les dernières versions, consultez les sites officiels de Ruby et Rails.
É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 :
- sudo apt update
Ensuite, installez PostgreSQL et ses bibliothèques de développement :
- 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:
- 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 :
- sudo -u postgres psql
Vous recevrez la sortie suivante, ainsi que l’invite pour la console PostgreSQL :
Outputpsql (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éé :
- \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 :
- \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 :
- cd ~
Créez une nouvelle application Rails dans ce répertoire, en remplaçant appname
par le nom que vous souhaitez donner à votre application :
- 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 :
- 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:
- 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
:
- 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
:
- 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:
...
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
:
- rails db:create
Une fois Rails crée la base de données, vous recevrez la sortie suivante:
OutputCreated 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:
- 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
:
- 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 :
- sudo ufw allow 3000
Ensuite, recherchez l’adresse IP publique de votre serveur. Vous pouvez le faire en exécutant la commande curl
suivante :
- 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 :
- 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.
- 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.