Как создать ежедневную работу (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
Я знаю, что это не очень хорошая практика