2011-03-26 5 views
1

Je suis en train d'écrire une application rails 3 qui nécessite d'effectuer de petites tâches sur une planification personnalisée pour chaque utilisateur. Les tâches planifiées seront définies dynamiquement. En ce moment mon plan est d'utiliser resque scheduler avec redis.planification des tâches dans les rails 3 app

Une fois que j'ai défini le programme pour une tâche spécifique (par exemple, exécuter la tâche A toutes les 48 heures), je voudrais exécuter cette tâche indéfiniment. Donc, je voudrais stocker ces horaires dans un DB ou quelque chose de si au cas où une application se bloque quand il redémarre, il chargerait la file d'attente à nouveau cette tâche.

Est-ce quelque chose que Resque prend en charge par défaut en le stockant en rouge ou dois-je écrire mon propre objet personnalisé? Je regardais aussi ruby-taskr (http://code.google.com/p/ruby-taskr/). Je ne suis pas sûr si taskr prend en charge le stockage dans une base de données et l'enregistrement au démarrage?

Aussi, il serait utile s'il y a des applications/démo que je peux regarder.

Merci

Répondre

1

J'ai une configuration similaire pour les travaux par lots. L'utilisateur les ajoute sur un tableau de bord Web et ils s'exécutent mais est souvent spécifié.

J'utilise active-record pour stocker les définitions de planification, utiliser resque pour l'exécution et une seule entrée cron pour la mise en file d'attente à l'aide d'une tâche rake.

donc alors dans la tâche de coupe:

to_run = Report.daily 
to_run += Report.weekly if Time.now.monday? 
to_run += Report.monthly if Time.now.day == 1 

to_run.each{|r| r.enqueue!} 

où tous les jours, chaque semaine, les champs mensuels sont nommés sur le modèle:

class Report < ActiveRecord::Base 
    scope :daily, where(:when_to_run => 'daily') 
    scope :weekly, where(:when_to_run => 'weekly') 
    scope :monthly, where(:when_to_run => 'monthly') 
end 

Ceci est un peu hacky, mais il fonctionne bien et je restez bien dans la pile. Espérons que c'est utile

+0

Cela a l'avantage qu'il fonctionne également dans des configurations comme Heroku qui exécute seulement rake cron une fois par jour/heure/etc –

Questions connexes