延迟作业每次引发错误时都会创建Airbrakes

时间:2012-10-09 17:03:51

标签: ruby ruby-on-rails-3 delayed-job

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语句中提出“延迟RefundJob失败”时,它会创建一个Airbrake。如果它在else部分结束,我想再次运行该作业。

有没有办法在不引发异常的情况下重新排队作业?并防止制造空气制动器?

我正在使用delayed_job版本1.

3 个答案:

答案 0 :(得分:2)

最干净的方法是重新排队,即创建一个新作业并将其排队,然后正常退出该方法。

答案 1 :(得分:1)

要详细说明@ Roman的回复,您可以创建一个新作业,其中包含retry参数,并将其排入队列。

如果您保留retry参数(每次重新排队作业时都会增加),您可以跟踪自己重做的次数,从而避免无休止的重试循环。

答案 2 :(得分:0)

根据定义,DelayedJob期望作业将错误提升为重新排队。

从那里你可以:

关于后面的解决方案,我建议添加一些机制,在第三次或以后的尝试中仍然填充空气制动器报告,您仍然可以检测到出现问题,而无需尝试填充日志。