我使用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