ruby on rails——每隔几秒运行一个后台作业



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

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

试试rufus-scheduler

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

require 'rufus/scheduler'
scheduler = Rufus::Scheduler.start_new
scheduler.every '20m' do
  puts 'hello'
end

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

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

然后你可以添加你的任务如下:

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

在日程表中。rb文件

最新更新