Плагину Rails backgroundRB необходимо запланировать его и поставить в очередь в базу данных для постоянства
Я пытаюсь сделать следующее:
- Запуск работника и метод внутри него каждые 15 минут
- Записать журнал последнего выполнения в таблицу базы данных bdrd_job_queue.
Что я сделал:
У меня есть расписание каждые 15 минут в моем файле backgroundRB.yml
Вызов метода имеет persistent_job.finish!
звоните, но это не работает, потому что persistent_job
объект равен нулю
Как я могу убедиться, что он зарегистрирован в БД, но все еще автоматически запланирован из backgroundRB.yml?
1 ответ
Решение
Я наконец смог сделать это.
Обходной путь - запланировать задачу, которая поставит ее в очередь в базу данных, запланированную для немедленного запуска.
В твоем работнике...
class NotificationWorker < BackgrounDRb::MetaWorker
set_worker_name :notification_worker
def create(args = nil)
end
def queue_notify_changes(args = nil)
BdrbJobQueue.insert_job(:worker_name => 'notification_worker',
:worker_method => 'notify_new_changes_DAEMON',
:args => 'hello_world',
:scheduled_at => Time.now.utc,
:job_key => 'email_changes_notification_task')
end
def notify_new_changes_DAEMON
#Do Incredibly cool stuff here
end
В конфигурационном файле backgroundrb.yml
---
:backgroundrb:
:ip: 0.0.0.0
:port: 11006
:environment: production
:log: foreground
:debug_log: true
:persistent_disabled: false
:persistent_delay: 10
:schedules:
:notification_worker:
:queue_notify_changes:
:trigger_args: 0 0 0 * * *