你如何在Rails中每小时调用一个方法?

时间:2011-05-22 23:02:44

标签: ruby-on-rails ruby methods time resque

我正在使用ResqueRedis来处理后台作业。我想每小时调用一次Resque.enqueue(MyModel)方法来执行后台任务。

例如:假设我有一个拥有10,000个用户的网站。我想每天只用这种方法24次;不是10,000 * 24.示例方法如下:

Resque.enqueue(MyModel)

提前感谢您的帮助。我还应该提到我更喜欢坚持使用Resque,而不是转向延迟工作。谢谢。

3 个答案:

答案 0 :(得分:6)

你应该使用cron作业来完成这类任务。

我建议你使用Whenever gem。

请参阅此处的railscast:http://railscasts.com/episodes/164-cron-in-ruby

答案 1 :(得分:3)

由于您已经在使用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的方式完成。

答案 2 :(得分:0)

你可以很容易地使用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 .

希望这可以帮到你!