Rails 3(或ActiveRecord 3)是否有插件可以複製舊的deadlock_retry插件?或者,該插件是否仍然適用於Rails 3?ActiveRecord3死鎖重試
回答
我甚至不知道有一個插件來做到這一點:)
下面是我們使用的(但你必須包裝容易導致死鎖的查詢,在它自己):
# Executes the given block +retries+ times (or forever, if explicitly given nil),
# catching and retrying SQL Deadlock errors.
def retry_lock_error(retries = 100, &block)
begin
yield
rescue ActiveRecord::StatementInvalid => e
if e.message =~ /Deadlock found when trying to get lock/ and (retries.nil? || retries > 0)
retry_lock_error(retries ? retries - 1 : nil, &block)
else
raise e
end
end
end
有是一個transaction_retry gem,它不僅能夠與Rails 3+一起工作,而且還支持所有主要數據庫(MySQL,PostgreSQL和SQLite)。它被銷售爲乾淨且經過充分測試的產品。
「死鎖重試允許數據庫適配器(目前只適用於 MySQLAdapter測試)重試落入僵局的交易,這將重試 這樣的交易最終失敗之前的三倍。
這功能會自動添加到ActiveRecord中,不需要更改代碼或其他方式。「
re「這個功能會自動添加到ActiveRecord中」 - 試圖找到確認這一點的源代碼,google-fu讓我失望。你能指出我在AR核心中對此的描述嗎? – 2014-05-14 22:25:09
我也許稀釋了你的誤解---海報引用的(rails/deadlock_retry)自動將這個添加到活動記錄 – 2015-07-21 20:22:42
- 1. 重試INSERT引起的死鎖
- 2. 調試PyThread_acquire_lock死鎖
- 3. 嘗試發現死鎖
- 4. SQL Server 2000 - 調試死鎖
- 5. x單元測試死鎖
- 6. 如何調試死鎖?
- 7. 使用nUnit測試死鎖
- 8. Postgresql鎖死鎖
- 9. 死鎖鎖()方法
- 10. 鎖分區死鎖
- 11. JDBC + MySQL:在鎖等待或死鎖的情況下重試事務
- 12. 如何用python調試死鎖?
- 13. 使用Windbg's!clrstack命令調試死鎖
- 14. 如何重構這個死鎖問題?
- 15. Postgres死鎖
- 16. UPDATE FROM死鎖
- 17. 死鎖與sigsuspend()
- 18. pthread_cond_signal死鎖
- 19. pthread_mutex_timedlock和死鎖
- 20. Restkit和死鎖
- 21. 死鎖行爲
- 22. NSManagedObjectContext死鎖
- 23. InternetSetOption死鎖?
- 24. 解決死鎖
- 25. C#不死鎖
- 26. NHibernate的死鎖
- 27. 使用pthread互斥鎖(linux)調試死鎖
- 28. MySQL的 - 死鎖時,試圖獲得鎖定
- 29. 如何避免mysql'嘗試獲取鎖時發現死鎖;嘗試重新啓動交易'
- 30. ActiveRecord :: StatementInvalid·Mysql2 :: Error:嘗試獲取鎖定時發現死鎖;嘗試重新啓動事務:
這只是讓我頭痛。謝謝。 – 2012-10-03 02:50:04