簡體   English   中英

你如何在Rails中每小時調用一個方法?

[英]How do you call a method every hour in Rails?

我正在使用Resque with Redis來處理后台作業。 我想每小時調用一次Resque.enqueue(MyModel)方法來執行后台任務。

例如:假設我有一個擁有10,000個用戶的網站。 我想每天只用這種方法24次; 不是10,000 * 24.示例方法如下:

Resque.enqueue(MyModel)

提前謝謝你的幫助。 我還應該提到我更喜歡堅持使用Resque,而不是轉向延遲工作。 謝謝。

您應該使用cron作業完成此類任務。

我建議你使用Whenever寶石。

請參閱此處的railscast: http ://railscasts.com/episodes/164-cron-in-ruby

由於您已經在使用Resque,我建議使用許多可用的Resque插件之一: resque-scheduler 也非常好地插入Resque UI。 簡單設置,如README中所述。 還添加了很多缺少的DelayedJob內容(延遲執行)。

為什么我從whenever切換到resque-scheduler

  • 保留在app文件夾中,不會弄亂你的cron文件。
  • 要停止所有'crons',只需禁用Resque worker。
  • 將異常記錄到Resque UI中。
  • 可以通過Resque UI手動重新安排。
  • resque-loner結合使用,如果作業花費的時間超過兩次執行之間的跨度,則可以防止雙重執行。
  • 仍然服從Resque的優先系統。
  • 沒有額外的啟動時間(如果您的應用程序變大,可能需要60秒),因為它使用Resque的工作池。
  • 少用“技術”。
  • 簡單的開關:配置以類似cron的方式完成。

你可以很容易地使用每當你要求的東西,以及更多,它有一個非常好的文檔。

你可以使用這樣的語法:

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 .

希望這對你有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM