如何在Rails ActiveJob中创建日常工作(类似cron)?

时间:2015-03-31 03:12:06

标签: ruby-on-rails ruby cron whenever

我知道这个帖子:A cron job for rails: best practices?,但是没有提到ActiveJob。我使用ActiveJob做动机的动机是因为它内置在Rails中,而且这里是其文档的摘录:

"这些工作可以是定期清理,计费和邮寄等所有工作。"

如何在Rails ActiveJob中创建日常工作(类似cron)?由于我没有看到在its docs中运行定期作业的示例。

或者我应该坚持whenever宝石?

4 个答案:

答案 0 :(得分:9)

坚持whenever宝石或类似的宝石,例如chronoclockworkrufus-scheduler

您在ActiveJob文档中阅读的内容有点令人困惑,因为似乎ActiveJob可能能够处理定期调度的责任。文档应该说恕我直言,这些工作是由其他系统或工具定期安排的。

  

那么,ActiveJob是关于排队的工作吗?

是的,它是关于Rails提供标准接口,用于将作业添加到队列,以及调用perform方法。 ActiveJob提供了方法接口,可以为许多作业处理队列,后端,直接运行程序等启用适配器。

答案 1 :(得分:7)

它为我工作:

every 1.day, at: '9:36 am' do
  runner 'SomeJob.perform_later'
end

我正在使用wheneverActiveJob

答案 2 :(得分:1)

如果您使用 sidekiq 适配器进行活动作业。 sidekiq-cron 内置了对 activejob 的支持。所以你可以直接使用它。 https://github.com/ondrejbartas/sidekiq-cron

答案 3 :(得分:0)

如果您不想添加Cron作业,可以在作业结束时拨打电话,以在第一次执行后1天重复执行同一作业

class SomeJob < ApplicationJob      
   def perform(*args) 
     #execution here...
     SomeJob.set(wait_until: Time.now + 1.day).perform_later(...)
   end
end

我知道这不是一个好习惯