Плагину Rails backgroundRB необходимо запланировать его и поставить в очередь в базу данных для постоянства

Я пытаюсь сделать следующее:

  1. Запуск работника и метод внутри него каждые 15 минут
  2. Записать журнал последнего выполнения в таблицу базы данных 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 * * *
Другие вопросы по тегам