2012-09-20 3 views
8

私は長い間うまく機能しているアプリケーションを持っています。私はthreadsafeをオンにしています!そして、Delayed Jobは私のモデルファイルの1つを見つけることができないと言って、動作しません。スレッドセーフを使用しているときにモデルクラスが遅延ジョブで読み込まれない

 
Job failed to load: undefined class/module Foo 

これは、このアプリ/モデルこのクラスをロードできませせることができるもの

でモデルファイルで、私は/ libに定義したカスタム・ジョブ・クラスではないでしょうか?

答えて

12

あなたはログインして問題に掲載したように、ケースには他の人が、これはSO最初の投稿見つける:

私は、同様にこの問題をヒット...と、ここで私が見つけたものです:Railsのアプリはない場合熱心な負荷クラスを行いますレーキタスクを介して読み込まれます(それがDJの役割です)。

それでは、私がやったことは、私のproduction.rbにこのコードの抜粋である:それはrakeタスクによってロードされるとき

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

Railsはそのグローバル変数を設定します。醜いですが、今はうまく動いているようです...もちろん、マルチスレッドのレーキタスクがある場合、これは理想的ではなく、おそらくRails.application.eager_loadを呼び出す必要があります。それらのタスクのために。私はマルチスレッドのレーキタスクはまれであると推測しています。

+2

ただ、再び同様の問題があったと '$のrails_rake_task'がapplication.rbに設定されていないnew--何かを発見ので、上記のコード行はそれぞれの環境設定に入ります。 –

+0

これは私のために働いた。したがって、スレッドセーフなモードで実行していないときは、モデルをプリロードしますか? –

+0

素晴らしい、いい見つける。 –

0

実際には関係はありませんが、スレッドセーフを有効にしないと、遅延ジョブではまったく同じエラーメッセージが表示されました。

理由と解決策は私たちのサーバー上に遅延ジョブを使って別のルビー製品があり、それはワーカーがキューに指定しなかったため、セットアップ中のキューからランダムジョブを取得していました。

3

patのrakeジョブにthreadsafeを使用しない方法を使用しても、私の仕事はまだ失敗していました。

私はGitHub Wiki pageで見つけ、次のマニュアルのローディング技術を使用するようになってしまった:

# file: config/initializers/custom.rb 
require 'my_custom_class' 
関連する問題