2010-12-17 5 views
0

Ich versuche handle_asynchronously auf ein Verfahren zur Herstellung einer Klasse zu verwenden, wie in dem folgenden:Mit delayed_job auf einer Nicht-Active Klasse

class MyClass 
    def publish_stream(opts={}) 
    # . . . 
    end 
    handle_asynchronously :publish_stream 
end 

Wenn delayed_job auszuführen versucht, wirft es die folgende Ausnahme:

NoMethodError: undefined method `publish_stream_without_send_later' for #<YAML::Object:0xbb52b00> 

(Beachten Sie, dass die ich die aktuellen Methodennamen mit „my_method“ oben ersetzt.)

ich glaube, die Ausnahme auftritt, weil die Klasse definin g Diese Methode ist nicht abgeleitet von ActiveRecord::Base; stattdessen ist es einfach von Object abgeleitet. Was kann ich tun, um dies zu beheben?

Antwort

1

Nach einigen Grabungen stellt sich heraus, dass die Rake-Task delayed_job etwas in der falschen Reihenfolge laden muss. Es funktionierte gut in der Konsole. Die Lösung war die folgende manuell in einem Initialisierer zu tun:

require 'my_class' 

wo „my_class“ ist der Dateiname der Klasse.

1

Meine Schätzung ist, dass DelayedJob versucht, das Objekt, an dem Sie arbeiten, zu serialisieren, und das Objekt daraus nicht neu erstellen kann.

+0

Nicht sicher, wer Ihre Antwort markiert, aber ich war es nicht. Es sieht so aus, als ob das der Fall sein könnte, und ich dränge immer noch hinein. Danke für die Antwort! –