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

How to create a daily job (cron-like) in Rails ActiveJob?

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

"These jobs can be everything from regularly scheduled clean-ups, to billing charges, to mailings."

如何在 Rails ActiveJob 中创建日常工作(类似 cron)?因为我没有在 its docs.

中看到 运行 定期安排的作业的示例

还是我应该坚持 whenever gem?

坚持 whenever gem or similar gem e.g. chrono, clockwork, rufus-scheduler

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

So, ActiveJob is about queued jobs?

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

它对我有用:

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

我正在使用 wheneverActiveJob

如果您不想添加 cron 作业,可以在作业末尾调用以在第一次执行后 1 天重复相同的作业

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

我知道这不是一个好习惯

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