我知道这个帖子:A cron job for rails: best practices?,但是没有提到ActiveJob。我使用ActiveJob做动机的动机是因为它内置在Rails中,而且这里是其文档的摘录:
"这些工作可以是定期清理,计费和邮寄等所有工作。"
如何在Rails ActiveJob中创建日常工作(类似cron)?由于我没有看到在its docs中运行定期作业的示例。
或者我应该坚持whenever
宝石?
答案 0 :(得分:9)
坚持whenever
宝石或类似的宝石,例如chrono
,clockwork
,rufus-scheduler
。
您在ActiveJob文档中阅读的内容有点令人困惑,因为似乎ActiveJob可能能够处理定期调度的责任。文档应该说恕我直言,这些工作是由其他系统或工具定期安排的。
那么,ActiveJob是关于排队的工作吗?
是的,它是关于Rails提供标准接口,用于将作业添加到队列,以及调用perform方法。 ActiveJob提供了方法接口,可以为许多作业处理队列,后端,直接运行程序等启用适配器。
答案 1 :(得分:7)
它为我工作:
every 1.day, at: '9:36 am' do
runner 'SomeJob.perform_later'
end
我正在使用whenever
和ActiveJob
答案 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
我知道这不是一个好习惯