7
def perform
  refund_log = {
    success: refund_retry.success?,
    amount: refund_amount,
    action: "refund"
  }
  if refund_retry.success?
    refund_log[:reference] = refund_retry.transaction.id
    refund_log[:message] = refund_retry.transaction.status
  else
    refund_log[:message] = refund_retry.message
    refund_log[:params] = {}
    refund_retry.errors.each do |error|
      refund_log[:params][error.code] = error.message
    end
    order_transaction.message = refund_log[:params].values.join('|')
    raise "delayed RefundJob has failed"
  end
end

else ステートメントで "delayed RefundJob has failed" を発生させると、 Airbrake が作成されます。else セクションで終了した場合は、もう一度ジョブを実行したいと思います。

例外を発生させずにジョブを再キューイングする方法はありますか? そして、エアブレーキの作成を防ぎますか?

私はdelayed_jobバージョン1を使用しています。

4

3 に答える 3

2

最もクリーンな方法は、再キューイングすることです。つまり、新しいジョブを作成してキューに入れ、メソッドを正常に終了します。

于 2012-10-10T16:47:43.937 に答える
0

DelayedJob は、定義上、ジョブが再キューイングされるエラーを発生させることを想定しています。

そこから、次のいずれかを実行できます。

後者の解決策については、3 回目以降の試行でエアブレーキ レポートを埋めるメカニズムを追加することをお勧めします。試行によってログがいっぱいになるという手間をかけずに、何か問題があることを検出できます。

于 2012-10-10T12:55:39.980 に答える