🔗 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以降にアップグレードしてからsidekiq
gemに切り替えること。fatkodima
同Changelogより
🔗 Remove deprecated internal SuckerPunch
adapter in favor of the adap… · rails/rails@634f90b★
内部の
SuckerPunch
アダプタを削除した。今後はsucker_punch
gemに含まれるアダプタを使うこと。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::Continuable
concernを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 end
Donal 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の可能性があるプルリク・コミット
個別のプルリクにも目印として★を追加しています。