rspec
でretry_on
のテスト書いて、ジョブクラスをリファクタしたら動かなくなりました。
環境
- 以下の環境で発生しました。
- | Version |
---|---|
ruby | 3.3.5 |
rails | 7.2.2 |
rspec | 3.13 |
本題
- ジョブクラスで
rescue_from
を使っていると、retry_on
が少なくとも動きませんでした。 - 本番環境で再現するかわかりませんが、気をつけないといけないポイントかと思います。
retry_on が動作する
class BaseJob < ApplicationJob
queue_as :default
retry_on RetryError, wait: 30.seconds, attempts: 4
def perform
# 何かしらの処理
rescue ActiveRecord::LockWaitTimeout => e
raise e if e.message.exclude?('try restarting transaction')
raise RetryError
end
end
retry_on が動作しない
class BaseJob < ApplicationJob
queue_as :default
retry_on RetryError, wait: 30.seconds, attempts: 4
rescue_from ActiveRecord::LockWaitTimeout, with: :error_handler
def perform
# 何かしらの処理
end
def error_handler(e)
raise e if e.message.exclude?('try restarting transaction')
raise RetryError
end
end