バックグラウンドで特定のタスクを処理するために 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'
この場合、レスキューステートメントが機能しない理由はありますか?