8

私は長い間うまく機能しているアプリを持っています。スレッドセーフをオンにしていますが、モデルファイルの1つが見つからないと言って、DelayedJobが機能していません。

ジョブのロードに失敗しました:未定義のクラス/モジュールFoo

これは/libで定義したカスタムジョブクラスではありません。これはapp/modelsのモデルファイルです。

このクラスがロードされない原因は何ですか?

4

3 に答える 3

12

あなたが記録した問題に投稿されたように、他の人がこのSO投稿を最初に見つけた場合:

私もこの問題にぶつかりました...そして私が見つけたものは次のとおりです:アプリがrakeタスクを介してロードされた場合、Railsはクラスをロードすることを熱望しません(そしてそれがDJのやり方です)。

だから私がやったことは私の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は、レーキタスクによってロードされるときにそのグローバル変数を設定します。醜いですが、今はうまく機能しているようです...もちろん、マルチスレッドのrakeタスクがある場合、これは理想的ではないため、Rails.application.eager_loadを呼び出す必要があります。それらのタスクのために。ただし、マルチスレッドのレーキタスクはまれだと思います。

于 2012-09-24T18:04:33.050 に答える
3

レーキジョブにスレッドセーフを使用しないというpatの方法を使用した後でも、私のジョブはまだ失敗していました。

結局、 GitHubWikiページにある次の手動読み込み手法を使用する必要がありました。

# file: config/initializers/custom.rb
require 'my_custom_class'
于 2013-04-27T01:59:10.220 に答える
0

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

理由と解決策ははるかに簡単でした-遅延ジョブを使用する別のルビー製品がサーバー上にあり、そのワーカーはキューに名前を付けていなかったため、私が設定したキューからランダムなジョブを取得していました。

于 2012-12-24T04:20:54.733 に答える