Whenever, les tâches cron simplifiées pour Rails

Publié le

Vous souhaitez mettre votre solution en avant en haut de cet article ? Contactez-nous



Nous vous présentons aujourd’hui Whenever, une gem qui permet de gérer ses crons par projets, et en Ruby.

Introduction

Un projet rails à généralement besoin de tâches qui se répètent dans un intervalle de temps. Faire des sauvegardes, mettre à jour des caches, lire des rss, …

Dans ce cas, on utilise généralement un cron, qui permet d’executer des commandes à une fréquence donnée, comme des tâches rake, par exemple. Le seul inconvénient est que quand on déploie son projet sur sa plateforme de production, il n’est pas simple de déployer ses tâches cron… sans whenever.

Installation

Whenever est une gem qui permet de créer ses tâches cron directement dans son projet rails, avec une syntaxe ruby très simple.

Vous trouverez son dépot github ici.

Pour l’installation, rien de compliqué, gem install whenever. Ensuite, il n’y a plus qu’à taper « wheneverize path/to/my/project/ », ce qui crée un « config/schedule.rb« 

Configuration

La configuration de whenever se fait à partir du fichier schedule.rb.

exemple de schedule.rb

every 3.hours do
  runner "MyModel.some_process"       
  rake "my:rake:task"                 
  command "/usr/bin/my_great_command"
end

every 1.day, :at => '4:30 am' do 
  runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
end

every :hour do # Many shortcuts available: :hour, :day, :month, :year, :reboot
  runner "SomeModel.ladeeda"
end

every :sunday, :at => '12pm' do # Use any day of the week or :weekend, :weekday 
  runner "Task.do_something_great"
end

every '0 0 27-31 * *' do
  command "echo 'you can use raw cron syntax too'"
end

Au déploiement, il suffit d’une ligne pour ensuite mettre à jour ses crons: whenever –update-crontab

Les lignes relatives au projet sont à ce moment là ajoutées en bas, avec un commentaire précisant leur projet d’appartenance.

By Benjamin Sanchez

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *