Rails 4 Delayed_job エラー - ジョブのロードに失敗しました: 未定義のクラス/モジュール CustomJob
概要
これに数日、約100時間を費やしましたが、修正できません。
これが私のセットアップです(Rails 4.2.8を使用)
class CustomJob < ActiveJob::Base
def perform(*args)
filename = args.first
data = File.read(filename)
# process that data
end
end
Delayed::Job.enqueue CustomJob.new(‘filename’) を実行すると、件名に記載されているエラーが発生します。ジョブが作成され、データベースに追加されますが、「ジョブは失敗しました…」というエラー メッセージが表示されます。
次の行があります:
require 'custom_job'
script/layed_job.rb、config/initializers/layed_jobs.rb、config/initializers/custom_job.rb、およびジョブを呼び出しているファイルを含むいくつかの場所にあります。
これも追加しました: config.autoload_paths+=Dir[Rails.root.join(‘app’,‘jobs’)] config.active_job.queue_adapter = :layed_job config/application.rb ファイルに
この:
config.threadsafe! unless defined? ($rails_rake_task) && $rails_rake_task
また、変更を加えるたびにサーバーを再起動しました。そして、以下を使用して、layed_job が実行されていることを確認しました。
dir$ RAILS_ENV=development script/delayed_job status
delayed_job: running [pid 64503]
解決策
答えがわかった後は、いつも答えは明らかだと感じます。
問題は、共有データベースを使用していて、この DB にアクセスする既存のワーカーが存在することでした。サーバーのローカル インスタンスを再起動して更新していましたが、他のインスタンスがジョブを実行しようとしていたため、ローカル インスタンスではなく、他のワーカーがエラーを引き起こしていました。
解決策: 遅延ジョブの他のインスタンスが、テスト/構築/使用しているコードと同じテーブルを使用していることを確認します。その場合は、可能であれば別の DB を使用してください。