我使用Resque和Redis來處理後臺作業。我想每小時調用一次Resque.enqueue(MyModel)方法來完成後臺任務。如何在Rails中每小時調用一次方法?
例如:假設我有一個擁有10,000個用戶的網站。我想每天只調用這種方法24次;不是10,000 * 24.示例方法如下:
Resque.enqueue(MyModel)
感謝您提前給予的幫助。我還應該提到,我更喜歡堅持Resque,而不是轉向延遲工作。謝謝。
我使用Resque和Redis來處理後臺作業。我想每小時調用一次Resque.enqueue(MyModel)方法來完成後臺任務。如何在Rails中每小時調用一次方法?
例如:假設我有一個擁有10,000個用戶的網站。我想每天只調用這種方法24次;不是10,000 * 24.示例方法如下:
Resque.enqueue(MyModel)
感謝您提前給予的幫助。我還應該提到,我更喜歡堅持Resque,而不是轉向延遲工作。謝謝。
我正在看railscast#164和每當寶石看起來不錯。你對這個寶石有很多很好的經驗嗎?我應該考慮什麼否定? – 2011-05-22 23:12:52
不,它很棒,讓你按照適當的週期安排你需要的任何東西 – apneadiving 2011-05-22 23:13:56
Cron作業不是Rails的特定選項。他們用於維護等... – apneadiving 2011-05-22 23:16:18
既然你已經使用Resque,我會建議使用許多可用Resque插件之一:resque-scheduler。插入Resque UI也非常好。簡單設置,如自述文件中所述。還增加了很多缺少的DelayedJob內容(延遲執行)。在應用程序文件夾
爲什麼我從whenever
切換到resque-scheduler
。
resque-loner
組合使用時,如果作業花費的時間比兩次執行之間的時間長,則可以防止執行雙重執行。+1,因爲它看起來像不會每5分鐘運行一次rake測試的環境啓動時間等。這對我們來說是一個巨大的勝利,有很多後臺任務。 – d11wtq 2011-05-22 23:46:03
你可以很容易地使用Whenever這正是你要求和更多,它有一個非常好的文檔。
你可以使用一些語法如下:
every 3.hours do
runner "MyModel.some_process"
rake "my:rake:task"
command "/usr/bin/my_great_command"
end
使用安裝:
$ gem install whenever
或將其添加到您的Gemfile:
gem 'whenever', :require => false
然後運行:
$ cd /apps/my-great-project
$ wheneverize .
希望這可以幫助你!
無限while循環,先調用方法再睡3600秒? – 2011-05-22 23:05:34
你會怎麼敢:)這裏有專門的工具! – apneadiving 2011-05-22 23:07:16
@apneadiving tbh,在這種簡單的情況下(特別是在需要訪問對象的地方),我會盡可能地設置一個cron作業。 – 2011-05-22 23:08:20