我正在使用Resque和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
:
resque-loner
结合使用,如果作业花费的时间超过两次执行之间的跨度,则可以防止双重执行。你可以很容易地使用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 .
希望这对你有所帮助!