我使用 DelayedJob 在后台处理某些任务。
例如,在我的应用程序中,用户可以“点赞”一条消息,当这种情况发生时,发帖人会收到通知。此通知在后台处理。
有时,可能发生的情况是点赞者决定在通知发出之前撤消他的操作并删除他的“点赞”。在这些情况下,后台代码会遇到“RecordNotFound”错误,因为“like”不再存在。
我以为我是通过挽救错误来处理这种情况的(这里的 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'
任何想法为什么我的救援声明在这种情况下不起作用?