2016-12-20 4 views
3

Я использую rails ActiveJob's delayed_job, но хотел бы иметь доступ к error and failure hooks delayed_job, чтобы запускать уведомления почтовых отправителей при ошибках работы или сбоях.Как расширить ActiveJob для доступа к ошибкам/ошибкам delayed_job?

Я думаю, что я отследил кусок ActiveJob code Мне нужно расширить, чтобы включить методы и методы задержки delayed_job.

Как я могу расширить класс JobWrapper ниже, включив методы и методы задержки delayed_job, поэтому я могу использовать собственный код ошибки/сбоя на основе работы?

require "delayed_job" 

module ActiveJob 

    module QueueAdapters 

    class DelayedJobAdapter 

     def enqueue(job) 
     delayed_job = Delayed::Job.enqueue(JobWrapper.new(job.serialize), queue: job.queue_name, priority: job.priority) 
     job.provider_job_id = delayed_job.id 
     delayed_job 
     end 

     def enqueue_at(job, timestamp) 
     delayed_job = Delayed::Job.enqueue(JobWrapper.new(job.serialize), queue: job.queue_name, priority: job.priority, run_at: Time.at(timestamp)) 
     job.provider_job_id = delayed_job.id 
     delayed_job 
     end 

     class JobWrapper 
     attr_accessor :job_data 

     def initialize(job_data) 
      @job_data = job_data 
     end 

     def perform 
      Base.execute(job_data) 
     end 
     end 
    end 
    end 
end 

ответ

0

ActiveJob реализует ActiveSupport::Rescuable означает, что вы можете использовать rescue_from.

class MyJob < ActiveJob::Base 

    rescue_from Exception do |e| 
    # do something with e 
    end 

    # rest of your job 

end 
0

Я считаю, что это то, что вы хотите

module ActiveJob 
    module QueueAdapters 
    class DelayedJobAdapter 
     class JobWrapper 
     def failure(job) 
      job_data = Base.deserialize(job.payload_object.job_data) 
      job_data.failure(job) if job_data.respond_to?(:failure) 
     end 
     end 
    end 
    end 
end 

Я отправил эту проблему/патч к рельсам Issue https://github.com/rails/rails/issues/30205

Смежные вопросы