класс, который делает это автоматически (он может быть запущен асинхронно, а затем выполнять фактическое задание синхронно).

а:

Сохранить успешно выполненные задания

Используемые методы

Посмотрел наэтот ответ который рассказывает, как сохранить выполненные задания иэтот ответ который предлагает создать плагин, который будет выполняться после одного из событий жизненного цикла.

проблема

Существуют следующие события жизненного цикла и соответствующие аргументы, представленные вкод:

  :enqueue    => [:job],
  :execute    => [:worker],
  :loop       => [:worker],
  :perform    => [:worker, :job],
  :error      => [:worker, :job],
  :failure    => [:worker, :job],
  :invoke_job => [:job]

Я ожидал, что будет какое-то событие, соответствующее успеху, я не получаюкоторый будет выполнен после успешного выполнения задания.

Какой-то код

С помощью приведенных выше ответов, я создал этот плагин для сохранения выполненной работы и вставилконфиг / Инициализаторы / save_completed_delayed_job.rb

module Delayed
  module Plugins
    class SaveCompletedDelayedJobPlugin < Plugin
      callbacks do |lifecycle|
        # see below for list of lifecycle events
        lifecycle.after(:perform) do |job|
          p "This should be ran after success so that I can save the job in different table"
          CompletedDelayedJob.create({
            priority: job.priority,
            attempts: job.attempts,
            handler: job.handler,
            last_error: job.last_error,
            run_at: job.run_at,
            failed_at: job.failed_at,
            completed_at: DateTime.now,
            queue: job.queue
            })
          end
      end
    end
  end
end

Delayed::Worker.plugins << Delayed::Plugins::SaveCompletedDelayedJobPlugin

Зачем мне нужен плагин

Я не могу использовать методы обратного вызова, так как у меня нет выделенного задания, я использую следующий код для постановки в очередь.

handle_asynchronously :deliver_delayed, :queue => 'my_q'

Ответы на вопрос(0)

Ваш ответ на вопрос