Как создать ежедневную работу (cron-like) в Rails ActiveJob?

Я знаю эту тему: работа cron для рельсов: лучшие практики? , но нет упоминания о ActiveJob. Мотивация сделать это с помощью ActiveJob заключается в том, что он встроен в Rails и здесь выдержка из его документов:

"Этими заданиями могут быть все: от регулярных плановых сборов, до выставления счетов, до почтовых рассылок".

Как создать ежедневную работу (cron-like) в Rails ActiveJob? Поскольку я не вижу примера для запуска регулярно запланированной работы в своих документах.

Или я должен придерживаться whenever драгоценности?

Ответы

Ответ 1

Придерживайтесь whenever драгоценного камня или подобного драгоценного камня, например, chrono, clockwork, rufus-scheduler.

То, что вы читаете в документации ActiveJob, немного запутанно, потому что может показаться, что ActiveJob может справиться с обязанностью регулярного планирования. В документации должно быть указано, что IMHO - это то, что задания регулярно планируются другой системой или инструментом.

Итак, ActiveJob о работе в очереди?

Да, это о Rails, предоставляющем стандартный интерфейс для добавления задания в очередь и вызов метода выполнения. ActiveJob предоставляет интерфейсы методов, которые позволяют адаптерам для многих очередей обработки заданий, бэкэндов, непосредственных участников и т.д.

Ответ 2

Это работает для меня:

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

Я использую whenever ActiveJob и ActiveJob

Ответ 3

Если вы не хотите добавлять задание cron, можете в конце задания сделать вызов, чтобы повторить то же задание через 1 день после первого выполнения.

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

Я знаю, что это не очень хорошая практика