3

そのため、ユーザーが特定のモデルを作成した後、(Heroku で) Delayed::Job ワーカーを after_create コールバックとして使用しています。

ただし、一般的な使用例は、ユーザーが何かを作成し、すぐに削除することです (おそらく、間違いや何かを犯したため)。

これが発生すると、ワーカーは起動しますが、手元のモデルをクエリするまでに、モデルは既に削除されていますが、自動再試行機能のために、この不運なジョブは 25 回再試行され、絶対に機能しません。

特定のエラーをキャッチし、それらが発生したときにその特定のジョブが再試行されないようにする方法はありますか?

4

2 に答える 2

3

これを行う代わりに、Davidの答えを拡張するには:

def after_create
   self.send_later :spam_this_user
end

私はこれをします:

# user.rb

def after_create
   Delayed::Job.enqueue SendWelcomeEmailJob.new(self.id)
end

# send_welcome_email_job.rb

class SendWelcomeEmailJob <  Struct(:user_id)
   def perform
      user = User.find_by_id(self.user_id)
      return if user.nil?  #user must have been deleted

      # do stuff with user
   end
end
于 2011-01-06T19:52:42.810 に答える
3

チェックは、delayed_job で呼び出す関数に抽象化します。目的のジョブを続行できるかどうか、関連するチェックを行い、そのジョブに取り組むか、成功を返します。

于 2010-08-05T06:22:25.027 に答える