每隔几秒运行一次后台作业

时间:2014-03-09 22:16:21

标签: ruby-on-rails delayed-job resque

假设我有一个需要从API提取数据的应用程序,但是我发送查询的频率是有限的(即,X请求/分钟上限)。为了确保我没有达到这个限制,我想将请求添加到队列,并有一个后台作业,它将拉动X请求并每分钟执行一次。但是,我不确定Rails中最好的方法是什么。从我收集的内容来看,DelayedJob是满足我需求的更好的库,但我没有看到任何支持只运行X作业一分钟。有谁知道是否有一种实现这样的功能的首选方式?

3 个答案:

答案 0 :(得分:6)

我有点晚了但是我想警告你不要在你的情况下使用whenever宝石: 由于您正在使用Ruby on Rails,因此每次在cron中调用时,使用whatever gem都会加载环境。

尝试rufus-scheduler

例如,将代码放在config/initializers/cron_stuff.rb

require 'rufus/scheduler'

scheduler = Rufus::Scheduler.start_new

scheduler.every '20m' do
  puts 'hello'
end

答案 1 :(得分:1)

首先,我建议使用Sidekiq来处理后台作业。它支持得很好,使用起来非常简单。如果您确实使用了Sidekiq,那么还有另一个名为Sidetiq的gem,它允许您运行定期作业。

答案 2 :(得分:0)

也许你可以[随时]尝试:https://github.com/javan/whenever

然后您可以添加以下任务:

every 3.hours do
  runner "MyModel.some_process"
  rake "my:rake:task"
  command "/usr/bin/my_great_command"
end

在schedule.rb文件中