何か問題がある場合、DelayedJob は出力しないようです。
1- 非アクティブなレコード クラスが必要であり、初期化する必要があります。
方法: config/initializers/load_classes_for_dj.rb ファイルを作成し、次の行を追加します。
require 'lib/libtest/delayed_test.rb'
DelayedTest
config/application.rb の config.autoload_paths に '#{config.root}/lib/libtest' がある場合は、require を行う必要はありません。
ソース:
Rails Delayed Job & ライブラリ クラス
2- Singleton モジュールを実装するクラスは、SingletonClass.instance.delay.sayhello を呼び出しても機能しません。
これを修正するには、次の手順を実行します。
class SingletonClass
include Singleton
# create a class method that does the call for you
def self.delayed_sayhello
SingletonClass.instance.sayhello
end
def sayhello
# this is how you can actually write to delayed_job.log
# https://stackoverflow.com/questions/9507765/delayed-job-not-logging
Delayed::Worker.logger.add(Logger::INFO, "hello there")
end
end
遅延クラス メソッドを呼び出すには、次の手順を実行します。
SingletonClass.delay.delayed_sayhello
はい、ここでクラスで .delay を呼び出しています。Ruby のクラスはオブジェクトでもあるため、ここでの呼び出しは有効であり、クラス メソッド「delayed_sayhello」にアクセスできます。
3- ActiveRecord オブジェクトまたは一部の複雑なオブジェクトを呼び出しに渡さずに、id を渡し、遅延メソッドでデータベース内のオブジェクトを検索してから、作業を行います。
するな:
DelayedClass.new.delay.do_some_processing_on_album Album.first
代わりにこれを行います:
DelayedClass.new.delay.do_some_processing_on_album Album.first.id
DelayedClass do_some_processing_on_album 内で、
a = Album.find_by_id id
少し前に見たこれに関するstackoverflowの投稿がありました-どれかわかりません:-)
4- 完成させるために、これはメーラーを行う方法です (deliver メソッドを呼び出さないでください):
Notifier.delay.signup(user_id)
3 に従って、ユーザーのオブジェクトではなく ID を渡して、サインアップ メソッド内でルックアップを行います。
上記のガイドラインに従っていることを確認したら、次を使用できます。
Delayed::Worker.logger.add(Logger::INFO, "hello")
それでも問題が解決しない場合は、問題を分析することをお勧めします。
a- 新しいクラスを作成します b- ステップ 1 に従ってクラスが含まれ、初期化されていることを確認します c- ステップ 4 のロギングを追加し、MyNewClass.new.delay を呼び出して動作するかどうかを確認します
これが皆さんのお役に立てば幸いです:-)