2012-09-20 8 views
8

Ich habe eine App, die seit langer Zeit gut funktioniert hat. Ich schalte threadsafe! Ein, und jetzt funktioniert der verzögerte Job nicht und sagt, dass er keine meiner Modelldateien finden kann.Modell Klassen laden nicht in verzögertem Job bei der Verwendung von threadsafe

 
Job failed to load: undefined class/module Foo 

Dies ist nicht eine benutzerdefinierte Jobklasse I in/lib definiert haben, ist dies ein Modell-Datei in app/models

was diese Klasse verursachen könnte nicht geladen werden?

Antwort

12

Wie in der Frage gepostet Sie bei anderen angemeldet, finden Dieser Beitrag SO zuerst:

Ich traf nur dieses Problem so gut ... und hier ist was ich gefunden: Rails nicht eifrig Belastungsklassen, wenn die App wird über eine Rake-Task geladen (und so macht DJ seine Sache).

Also, was ich getan habe, ist dieser Code-Snippet in meinem production.rb:

# Enable threaded mode, unless a rake task (likely Delayed Job) is running: 
config.threadsafe! unless defined?($rails_rake_task) && $rails_rake_task 

Rails setzt die globale Variable, wenn es durch einen Rechen Aufgabe geladen wird. Hässlich, aber scheint jetzt für mich in Ordnung zu sein ... Natürlich, wenn Sie Rake-Aufgaben haben, die Multi-Threading sind, dann ist das nicht ideal, und Sie sollten wahrscheinlich Rails.application.eager_load aufrufen! für diese Aufgaben. Ich vermute, Multi-Threaded Rake-Aufgaben sind jedoch selten.

+2

gerade ein ähnliches Problem hatte wieder und entdecken etwas new-- '$ rails_rake_task' nicht in application.rb gesetzt , also muss die obige Codezeile in die jeweilige Umgebung configs gehen. –

+0

Das hat bei mir funktioniert. Wenn es also nicht im ThreadSafe-Modus läuft, lädt es die Modelle vor? –

+0

Super, nette Entdeckung. –

0

nicht wirklich verwandt, aber ich hatte heute genau dieselbe Fehlermeldung mit verzögertem Job, ohne threadsafe zu aktivieren.

Grund und Lösung war viel trivialer - es gab ein anderes Ruby-Produkt auf unserem Server mit verzögerter Job und es war Arbeitern nicht benannten Warteschlange, so dass sie zufällige Jobs aus der Warteschlange greifen, die ich eingerichtet habe.

3

Meine Jobs waren immer noch nicht einmal nach der Verwendung von Pat 's Methode der Verwendung von Threadsafe für Rake-Jobs.

Ich landete mit der folgenden manuellen Ladetechnik auf den GitHub Wiki page gefunden verwenden:

# file: config/initializers/custom.rb 
require 'my_custom_class'