後,我註冊了一個after_commit觸發我的Active Record實體之一,像這樣:Rails的活動記錄具有零ID提交
class Work < ActiveRecord::Base
after_commit :on_work_commit
...
def on_work_commit
puts self.id # prints nil sometimes
end
end
的問題是,在我的生產環境,self.id有時是零 在on_work_commit方法中。它不會一直髮生,事實上,它會間歇性地發生。通過分析這些錯誤的堆棧跟蹤,我可以看到它們在工作創建操作期間間歇性地發生,但從未在更新工作時發生。我無法在本地重現此問題,因爲它僅在生產時發生,同時正在創建和更新大量作品。
這種問題尖叫我的競爭條件,但我不知道什麼可能是錯的。在對象可以獲得一個id之前,是否有任何可以爲一個對象調用after_commit觸發器的場景?
我正在使用rails版本3.2.22和ruby版本1.9.3-p484。
您是否找到解決方案? – Kris
還沒有!我們現在無視它,稍後會回來。一旦找出原因,我會盡快更新。 – Tavio
您的測試是否包含在事務中,例如'use_transactional_fixtures'或數據庫清理事務策略。更改截斷可能會有所幫助。但是如果你的after_commit被解僱了,你不能在交易中包裝你的測試...... – Kris