2017-12-01 3 views
1

I enthalten delayed_job -gem in mein Projekt:Warum perform-method funktioniert, aber andere Ereignisse von delayed_job werden nicht aufgerufen?

# Gemfile 
gem 'daemons' 
gem 'delayed_job_active_record' 

# bash 
bundle 
rails generate delayed_job:active_record 
rake db:migrate 

rails g job MyFirstDelayedJob 

und bearbeitet app/jobs/my_first_delayed_job_job.rb-Datei wie folgt:

class MyFirstDelayedJobJob < ApplicationJob 
    queue_as :default 

    def perform(*args) 
    JOB_LOGGER.info "perform() happened with args: #{args.inspect}" 
    end 

    def success(job) 
    JOB_LOGGER.info "success() happened. Job object: #{job.inspect}" 
    end 

    def error(job, ex) 
    JOB_LOGGER.info "error() happened. Job object: #{job.inspect}, Exception: #{ex.message}" 
    end 

    def failure(job) 
    JOB_LOGGER.info "failure() happened. Job object: #{job.inspect}" 
    end 
end 

delayed_job Arbeiter von Schienen Konsole gestartet Debug-Protokolle, um zu sehen:

Delayed::Worker.new.start 

Rake-Aufgabe erstellt:

# lib/tasks/run_my_first_delayed_job.rake 
desc 'Run job' 
task my_first_delayed_job_job: :environment do 
    JOB_LOGGER.info 'run_my_first_delayed_job.rake: Starting delayed job...' 
    MyFirstDelayedJobJob.set(wait: 30.seconds).perform_later 'arg1', 'arg2', 333 
    JOB_LOGGER.info 'run_my_first_delayed_job.rake: Finished.' 
end 

Und in der Schale ausgeführt: rake my_first_delayed_job_job

Nach Rake-Task ausgeführt, ich habe diese Protokolle:

# log/job.log 
I, [2017-12-01T19:18:14.591918 #11664] INFO -- : run_my_first_delayed_job.rake: Starting delayed job... 
I, [2017-12-01T19:18:14.655178 #11664] INFO -- : run_my_first_delayed_job.rake: Finished. 
I, [2017-12-01T19:18:44.785494 #11591] INFO -- : perform() happened with args: ["arg1", "arg2", 333] 

Warum success, error, failure Rückrufe nicht aufgerufen?

Antwort

1

Sie Schaffung neuer Arbeitsplätze wie folgt aus:

MyFirstDelayedJobJob.set(wait: 30.seconds).perform_later 'arg1', 'arg2', 333 

Ihre Variante richtig für active-job. Aber delayed_job Gem hinzugefügt delay Methode für die Ausführung von Aufträgen, so dass Sie es anstelle von perform_later verwenden müssen. Schreiben Sie Ihren Code wie folgt um:

# lib/tasks/run_my_first_delayed_job.rake 
MyFirstDelayedJobJob.new.delay(run_at: 30.seconds.from_now).perform 'arg1', 'arg2', 333 
+0

es funktioniert wie ein Charme! –

Verwandte Themen