Rails 7.1: バックグラウンドジョブのenqueue呼び出し元をログ出力可能になった(翻訳)
このブログ記事はRails 7シリーズの一環です。
Rails 7.1のActive Jobに、バックグラウンドジョブのenqueue
呼び出し元をログ出力する新しいオプションが導入されました。これはジョブがどこでエンキューされたかという情報を提供するので、デバッグで非常に有用です。ログ出力は以下のようになります。
[ActiveJob] Enqueued NotifySubscribersJob (Job ID: 5945980f-303e-4c3f-af5b-e22be170f7c5) to Sidekiq(default)
[ActiveJob] ↳ app/models/post.rb:14 in `notify_subscribers`
上のログを調べれば、Post
モデルのnotify_subscribers
メソッドで
NotifySubscribersJob
というジョブがエンキューされたことがすぐにわかるので、ジョブがどこから来たかを明確に把握できるようになります。
この機能を有効にするには、config/environments/development.rb
で以下のコンフィグを設定する必要があります。
# config/environments/development.rb
config.active_job.verbose_enqueue_logs = true
ただし、Rails 7.1ではこのdevelopment環境のコンフィグがデフォルトで有効になります。
重要なのは、production環境で冗長なエンキューログを有効にするのは推奨されていないことです。この機能で使われているRubyのKernel#caller
メソッドは遅い可能性があるためです。
詳しくは#47839をご覧ください。
概要
元サイトの許諾を得て翻訳・公開いたします。
参考: 週刊Railsウォッチ20230425: バックグラウンドジョブのenqueue呼び出し元をログ出力できるようになった
参考: Rails API
enqueue
--ActiveJob::Enqueuing