我使用DelayedJob处理后台中的某些任务。DelayedJob工作人员救援“RecordNotFound”错误
例如,在我的应用程序中,用户可以“喜欢”一条消息,当发生这种情况时,通知海报。此通知在后台处理。
偶尔,可能发生的事情是,liker决定撤消他的行为,并在通知发出之前删除他的“like”。在这些情况下,由于“like”不再存在,后台代码会遇到“RecordNotFound”错误。
我想我被抢救误差所以处理这种情况下(这里自我是等):
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'
任何想法为什么我的救援声明不起作用在这种情况下?
在Urbanairship :: push_now呼叫之前它失败吗?你能粘贴整个堆栈跟踪吗? – 2013-03-04 22:13:16
对不起,这里是完整的堆栈跟踪:https://gist.github.com/pejmanjohn/8cf9f1f1d55a90f1ae39 – pejmanjohn 2013-03-04 22:20:40
你确定你的'begin'和'rescue'之间发生错误吗?尝试在'begin'之后直接添加'raise ActiveRecord :: RecordNotFound'。如果这种方法有效并且被捕获,那么将它直接移到“抢救”之前并尝试。也许这可以给你一些线索...... – 244an 2013-03-05 01:04:07