🔗 Active Job Changelog
参考: Release 8.1.0.beta1 · rails/rails
参考: コミットリスト: Comparing v8.0.2.1...v8.1.0.beta1 · rails/rails
🔗 Deprecate built-in sidekiq adapter by fatkodima · Pull Request #53058 · rails/rails★
組み込みの
sidekiqアダプタを非推奨化した。この組み込み
sidekiqアダプタを利用している場合は、sidekiqを7.3.3以降にアップグレードしてからsidekiqgemに切り替えること。fatkodima
同Changelogより
🔗 Remove deprecated internal SuckerPunch adapter in favor of the adap… · rails/rails@634f90b★
内部の
SuckerPunchアダプタを削除した。今後はsucker_punchgemに含まれるアダプタを使うこと。Rafael Mendonça França
同Changelogより
🔗 Remove support to set `ActiveJob::Base.enqueue_after_transaction_comm… · rails/rails@f9e51b7★
ActiveJob::Base.enqueue_after_transaction_commitに:never、:always、:defaultを設定可能にする非推奨化機能を削除Rafael Mendonça França
同Changelogより
非推奨化されていた
Rails.application.config.active_job.enqueue_after_transaction_commitを削除。Rafael Mendonça França
同Changelogより
enqueue_after_transaction_commitはRails 7.2で導入された機能ですが、Rails 8.0では#53375の非推奨化時点で設定項目から削除されています。
参考: Ruby on Rails 7.2 リリースノート - Railsガイド
🔗 Optimize Active Job argument serialization by ~5x by byroot · Pull Request #55583 · rails/rails★
ActiveJob::Serializers::ObjectSerializers#klassメソッドがpublicに変更された。Active Jobのカスタムシリアライザはpublicの
#klassメソッドも実装しなければならない。
このメソッドから返されるクラスはインデックスとなって高速なシリアライズを可能にする。Jean Boussier
同Changelogより
🔗 Active Job Continuations by djmb · Pull Request #55127 · rails/rails
新しいContinuation(継続)によって、Active Jobでジョブの中断(interrupt)や再開(resume)が可能になった。
ジョブに
ActiveJob::ContinuableconcernをincludeすることでContinuationを利用可能になる。
Continuationはジョブを複数のステップに分割する。キューイングシステムによってジョブがシャットダウンされると、ジョブは中断可能になり、それまでの進捗が保存される。class ProcessImportJob include ActiveJob::Continuable def perform(import_id) @import = Import.find(import_id) # ブロック形式の場合 step :initialize do @import.initialize end # ステップはカーソル単位で進められ、ジョブが中断されるとカーソルを保存する step :process do |step| @import.records.find_each(start: step.cursor) do |record| record.process step.advance! from: record.id end end # メソッド形式の場合 step :finalize private def finalize @import.finalize end end endDonal McBreen
同Changelogより
🔗 Defer ActiveJob enqueue callbacks until after commit when enqueue_after_transaction_commit enabled by wroever · Pull Request #55004 · rails/rails
enqueue_after_transaction_commitがtrueの場合に、Active Jobのエンキューコールバックがafter_commitまで先送り(defer)されていなかった問題を修正。Will Roever
同Changelogより
🔗 Add report: option to ActiveJob::Base#retry_on and #discard_on by andrewn617 · Pull Request #54541 · rails/rails
ActiveJob::Baseの#retry_onメソッドと#discard_onメソッドにreport:オプションが追加された。
report:オプションを渡すと、ジョブがリトライまたは破棄される前にエラーレポーターにエラーが報告される。Andrew Novoselac
同Changelogより
🔗 Accept a block for ActiveJob::ConfiguredJob#perform_later by fatkodima · Pull Request #53859 · rails/rails
ActiveJob::ConfiguredJobの#perform_laterメソッドにブロックも渡せるようになった。
ActiveJob::Baseの#perform_laterメソッドではブロック渡しが可能だったので、従来は一貫していなかった。fatkodima
同Changelogより
🔗 Raise a more specific error when the job class can't be instantiated by Earlopain · Pull Request #53770 · rails/rails
シリアライズされたジョブクラスがデシリアライズで"unknown"になった場合のエラーメッセージを表示するためのエラークラスが追加された。
従来の
NameErrorに代えてActiveJob::UnknownJobClassErrorがraiseされるようになる。これによって、発生したエラーがNameErrorかどうかをアダプタ側で判断しやすくなる。Earlopain
同Changelogより
breaking changesの可能性があるプルリク・コミット
個別のプルリクにも目印として★を追加しています。