Sooey

2011-12-13 20:09:32 +0900

collectiveidea/delayed_jobで定義できるフックメソッド。

collectiveidea/delayed_jobでは、以下のようにカスタムジョブにフックとなるメソッドを定義できる。

class SomeIncredibleJob
  def enqueue(job)
  end

  def perform
  end

  def before(job)
  end

  def after(job)
  end

  def success(job)
  end

  def error(job, exception)
  end

  def failure
  end
end

enqueueがジョブをキューイングした時点で呼び出されるのは名前の通りなのでよいとして、それ以外のメソッドが呼ばれるタイミングは以下の通り。

performが正常に実行される場合

  • before
    • delayed_jobs.locked_atdelayed_jobs.locked_byが更新される
  • perform
  • success
  • after
  • DELETE FROM delayed_jobs ...が実行されてジョブが削除される

performが例外を発生する場合

  • before
    • delayed_jobs.locked_atdelayed_jobs.locked_byが更新される
  • perform
  • error
  • after
  • attemptsDelayed::Worker.max_attemptsで定義された回数に達する場合
    • failure
  • UPDATE delayed_jobs ...が実行されてattemptslast_errorが更新される