2016-04-14 3 views
0

Ich benutze ActiveJob in meiner Rails App und versuche, einige generische Funktionen hinzuzufügen, die von allen meinen Jobs geteilt werden sollten (Ausnahmenbehandlung, um genau zu sein).Gibt es ein Äquivalent von ApplicationController, aber für Active Job?

Ein Beispiel dafür ist -

class MyAbstractJob < ActiveJob::Base 
    rescue_from StandardError do |exception| 
    # do exception handling stuff ... 
    end 
end 

class FooJob < MyAbstractJob 
    queue_as :my_queue 

    def perform *args 
    # do job stuff ... 
    end  
end 

Dieses Muster auf die Verwendung von ApplicationController für Steuerungen analog ist, die sie von ActionController::Base erbt und bieten irgendwo gemeinsame Einrichtungen auf einer beliebigen Controller Unterklasse zur Verfügung zu implementieren.

Dies scheint tatsächlich zum größten Teil außer zu arbeiten, wenn ich versuche, queue_as :my_queue zu nennen - in dem Fall, dass ich am Ende sehen -

NoMethodError: undefined method 'queue_as' for #<Class:0x007f088905c970>

Ich sehe Referenzen nicht in der Rails doc dazu bestimmtes Muster. Kennt jemand einen guten Ansatz dafür?

Antwort

0

Das ist seltsam, ich denke, dass Ihr Code korrekt ist. Ich habe Ihren Code wie getestet wird, nichts geändert hat, und sehen keine Probleme:

FooJob.perform_later 
# Performing FooJob from Inline(my_queue) 
# Performed FooJob from Inline(my_queue) in 3.81ms 
# Enqueued FooJob (Job ID: 6fd5ea5c-06bb-46d8-943c-8cc6f1e6ac33) to Inline(my_queue) 
# => #<FooJob:0x0000000464de90 @arguments=[], @job_id="6fd5ea5c-06bb-46d8-943c-8cc6f1e6ac33", @queue_name="my_queue"> 

ich beide Klassen in das app/jobs Verzeichnis gesetzt haben.

Der Fehler, den Sie in Ihrer Frage angezeigt haben, scheint vererbungsbedingt zu sein. Sind Sie sicher, dass Ihre FooJob Klasse wirklich von der MyAbstractJob erbt? Vielleicht müssen Sie auch Rails neu laden, nur um sicher zu gehen.

Wenn Ihr Problem weiterhin besteht, geben Sie bitte echten Klassencode ein, keine vereinfachten Beispiele.

+0

Danke! Es stimmt, es funktioniert tatsächlich gut. Der Fehler war woanders. – metahamza