0

バックグラウンドで特定のタスクを処理するために DelayedJob を使用しています。

たとえば、私のアプリケーションでは、ユーザーはメッセージに「いいね」を付けることができ、それが発生すると投稿者に通知されます。この通知はバックグラウンドで処理されます。

場合によっては、通知が送信される前に、いいねをした人が自分のアクションを元に戻し、「いいね」を削除することを決定することがあります。このような場合、「いいね」が存在しないため、バックグラウンド コードで「RecordNotFound」エラーが発生します。

私はエラーをそのように救うことでこのケースを処理したと思いました(ここのselfはLikeです):

  def send_push_notifications
    begin
      user = self.message.user
      message = "#{self.user.name} liked your workout"
      Urbanairship::push_now(user, message, ["message", self.message.id]) if self.user != user
    rescue ActiveRecord::RecordNotFound
      # Do nothing
    end
  end

ただし、実際には、ログにそのようなエラーがまだ表示されるため、これでエラーが解決されているようには見えません。

{ActiveRecord::RecordNotFound, class: Like , primary key: 1557 
/app/vendor/bundle/ruby/1.9.1/gems/delayed_job-3.0.2/lib/delayed/serialization/active_record.rb:12:in `rescue in yaml_new'
/app/vendor/bundle/ruby/1.9.1/gems/delayed_job-3.0.2/lib/delayed/serialization/active_record.rb:6:in `yaml_new'
/usr/local/lib/ruby/1.9.1/syck.rb:135:in `transfer'
/usr/local/lib/ruby/1.9.1/syck.rb:135:in `node_import'
/usr/local/lib/ruby/1.9.1/syck.rb:135:in `load'
/usr/local/lib/ruby/1.9.1/syck.rb:135:in `load'

この場合、レスキューステートメントが機能しない理由はありますか?

4

2 に答える 2

1

遅延呼び出しにインスタンス メソッドではなくクラス メソッドを使用することで、最終的にこれを解決しました。例としてお見せしましょう。以前に遅延呼び出しを構成した方法は次のとおりです。

  def background_send_push_notifications
    self.delay.send_push_notifications
  end

  def send_push_notifications
    message = "#{self.user.name} liked your workout"
    ...
  end

私が突きつけ続けた問題は、ユーザーが何かを気に入った直後に、すぐに取り消すことが一般的であるということでした. これは、delayed_job が実行しようとしたときに Like オブジェクトがなくなったことを意味し、多くの「RecordNotFound」エラーが発生しました。

これで、バックグラウンドでオブジェクト ルックアップを実行し、オブジェクトが存在しなくなった場合に戻るクラス メソッドに遅延呼び出しを移行しました。新しい構造はこちら

  def background_send_push_notifications
    Like.delay.send_push_notifications(self.id)
  end

  def self.send_push_notifications(id)
    like = Like.find_by_id(id)
    like.send_push_notifications unless like.nil?
  end

  def send_push_notifications
    message = "#{self.user.name} liked your workout"
    ...
  end

これが誰かに役立つことを願っています!

于 2013-06-27T17:47:40.363 に答える