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. 尝试锁定时发现死锁;尝试重新启动
- 2. 重试INSERT引起的死锁
- 3. 调试PyThread_acquire_lock死锁
- 4. 调试数据库死锁
- 5. 调试休眠/ Ehcache死锁
- 6. SQL Server 2000 - 调试死锁
- 7. 使用nUnit测试死锁
- 8. 尝试发现死锁
- 9. x单元测试死锁
- 10. 如何调试死锁?
- 11. Postgresql锁死锁
- 12. 尝试锁定时发现死锁;尝试重新启动交易
- 13. 死锁
- 14. 锁分区死锁
- 15. 死锁锁()方法
- 16. nhibernate重试如何管理会话中的死锁
- 17. 如何使用Doctrine在死锁后重试事务?
- 18. 在循环中重试死锁,它们最终会解决吗?
- 19. JDBC + MySQL:在锁等待或死锁的情况下重试事务
- 20. 使用gdb调试kext:死锁
- 21. 使用Windbg's!clrstack命令调试死锁
- 22. 在Amazon RDS上调试MySQL死锁
- 23. 需要帮助调试互斥死锁
- 24. 如何用python调试死锁?
- 25. Django +硒测试挂起 - 死锁?
- 26. Java ExecuterService死锁?
- 27. NSManagedObjectContext - FetchRequest死锁
- 28. Neo4j的死锁
- 29. EnterCriticalSection死锁
- 30. 死锁管理
这只是让我头痛。谢谢。 – 2012-10-03 02:50:04