Bonjour, je vous propose aujourd’hui une petite introduction aux tâches rake ( rake tasks ).
Les rake tasks sont un moyen de définir des tâches réutilisables et automatisées dans une application Ruby.
Elles peuvent être utilisées pour effectuer une grande variété de tâches, telles que la migration de bases de données, la création de rapports, la synchronisation de données, etc.
Il est fort à parier que vous ayez déjà rencontré des “rake tasks” si vous avez utilisé un framework comme Ruby on Rails au moins une fois dans votre vie.
Comment utiliser des rake tasks ?
Pour utiliser des rake tasks dans un projet Ruby, vous devez d'abord installer la gem Rake en ajoutant la ligne gem 'rake'
au fichier Gemfile
de votre application, puis en exécutant bundle install
.
Une fois que Rake est installé, vous pouvez créer des tâches en créant un fichier .rake
dans le répertoire lib/tasks
de votre application. Dans ce fichier, vous pouvez utiliser la méthode task
de Rake pour définir votre tâche comme suit:
namespace :my_tasks do desc "Description of my task" task :task_name => :environment do # code to execute the task goes here endend
Petite explication : la méthode task
prend en premier argument le nom de la tâche (ici, :task_name
) et en second argument une liste de dépendances (ici, :environment
). Vous pouvez définir une description de la tâche avec la méthode desc
.
Pour exécuter votre tâche nouvellement créée, vous pouvez utiliser la commande rake task_name
dans votre terminal.
Si vous souhaitez lister les tâches que vous avez définies dans votre fichier .rake
, vous pouvez utiliser la commande rake -T
qui affichera alors la liste de toutes les tâches disponibles, avec leur description.
Il existe de nombreuses autres options et méthodes disponibles pour personnaliser et étendre les rake tasks de votre application, nous développerons cela dans les parties suivantes.
Aller plus loin en utilisant les arguments
Nous pouvons enrichir les possibilités des rake tasks en permettant à celles-ci de prendre des arguments en compte pour leur exécutions. Voici un exemple :
namespace :my_tasks do desc "Print a message" task :print_message, [:message] => :environment do |t, args| puts args[:message] endend
Pour exécuter cette tâche et lui passer un argument, utilisons la commande suivante:
rake print_message[hello]
Cette tâche, vous l’aurez compris, affichera le message "hello" dans le terminal.
Voici un autre exemple de tâche Rake qui prend plusieurs arguments:
namespace :my_tasks do desc "Print a message multiple times" task :print_message_multiple, [:message, :count] => :environment do |t, args| args[:count].to_i.times do puts args[:message] end endend
Pour exécuter cette tâche et lui passer deux arguments, utilisons la commande suivante:
rake print_message_multiple[hello,5]
Cette tâche afficher le message "hello" cinq fois dans le terminal.
Et Ruby on Rails dans tout ça ?
Comme énoncé plus haut dans l’article, Ruby on Rails utilise rake pour proposer tout une liste de commandes utilitaires bien pratique, pour nous aider au développement. Des commandes allons de la génération de controller et de modèles, aux commandes permettant de lister des informations, par exemple la liste des routes disponibles au sein de notre application.
Vous pouvez, vous aussi, créer vos propres tâches pour enrichir les possibilités de votre applications rails.
Voici un exemple :
namespace :db do desc "Fill the database with sample data" task :populate => :environment do # Create some sample data here User.create(name: "John", email: "john@example.com") User.create(name: "Jane", email: "jane@example.com") # ... endend
Cette tâche crée des enregistrements de données d'exemple dans la table users
de la base de données de l'application.
Cette tâche peut être utile pour remplir la base de données avec des données de test ou pour créer un jeu de données de démonstration pour une application.
Pour exécuter cette tâche :
rake db:populate
Voici un autre exemple de tâche Rake qui peut être utile dans une application Ruby on Rails :
namespace :emails do desc "Send a reminder email to all users who have not logged in for 30 days" task :send_reminders => :environment do users = User.where("last_login < ?", 30.days.ago) users.each do |user| UserMailer.login_reminder(user).deliver_now end endend
Cette tâche envoie un e-mail de rappel à tous les utilisateurs qui n'ont pas connecté depuis 30 jours.
Pour exécuter cette tâche :
rake emails:send_reminders
Consolider ses connaissances
Pour aller plus loin, je vous conseille de consulter ces différentes ressources :
- La documentation officielle de Rake : https://github.com/ruby/rake
- Un guide détaillé sur l'utilisation des tâches Rake dans une application Ruby on Rails : https://guides.rubyonrails.org/command_line.html#custom-rake-tasks
J'espère que cet article vous donnera une idée de ce que vous pouvez faire avec les tâches Rake, dans vos futurs projet Ruby !