2011-03-26 28 views
1

我正在編寫一個rails 3應用程序,它需要爲每個用戶在自定義時間表上執行小任務。計劃任務將被動態定義。現在我的計劃是使用redis的resque scheduler。在rails 3應用程序中調度任務

一旦我設置了指定任務的計劃(例如,每48小時運行一次任務A),我想無限期地運行該任務。所以我想將這些時間表存儲在一個數據庫或其他東西,以防萬一一個應用程序崩潰,當它重新啓動它會再次加載隊列這些任務。

這是Resque支持默認情況下通過將其存儲在redis或我需要寫我自己的自定義事件嗎?我也在研究ruby-taskr(http://code.google.com/p/ruby-taskr/)。我不確定taskr是否支持將其存儲在數據庫中並在開始時註冊它?

此外,如果有我可以查看的應用程序/演示程序,這將是有幫助的。

謝謝

回答

1

我有一個類似的批處理作業設置。用戶將它們添加到Web儀表板上,然後通常會指定它們運行。

我使用活動記錄來存儲調度定義,使用resque執行,並使用rake任務使用單個cron條目排隊。

所以後來在耙子任務:

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!} 

那裏每天,每週,在模型上月被命名範圍:

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 

這是一個小哈克,但它工作得很好,我很好地保持在堆棧內。希望是有用的

+0

這樣做的好處是它也可以在像Heroku這樣的設置中工作,它只能每天/每小時執行一次rake cron/etc – 2011-05-05 15:52:19

相關問題