ウェブサービスを作っています。

Delayed::Job のリトライ速度を調整する

Delayed::Job では、例外が発生した場合、

5 秒 + リトライ回数 ** 4秒

経過した後にリトライしてくれますが、これを変更する方法です。
Delayed::Job のバージョンは、2.1.4 です。


やり方は簡単で、ジョブのクラスに、リトライ時刻を返す reschedule_at メソッドを定義します。
このメソッドは、第 1 引数に現在の時刻、第 2 引数にリトライ回数を取ります。

例: 1 時間ごとにリトライする

class HogeJob < Struct.new(:id)
  def perform
    ...
  end

  def reschedule_at(db_time_now, attempts)
    db_time_now + 1.hour
  end
end