大约每三次我的应用程序提供一个特定的更新操作(到目前为止我发现了两个),它会发现“检测到死锁”错误。
我无法将其跟踪到任何我们自己的应用程序代码。似乎操作完成了,但随后Rails或Passenger将其包装起来就会发生此崩溃。 (仅在脚本/控制台中保存记录不会发生这种情况。)
以下是日志中出现的内容:https://gist.github.com/1259104
发生了什么事,我该怎么办呢?
(注意:已经切换到基于RVM的Ruby 1.9.2,并且问题仍然存在。)
答案 0 :(得分:0)
问题似乎是:
https://rails.lighthouseapp.com/projects/8994/tickets/5736-connections-not-released-in-rails-3
但是,上述问题仅适用于Rails 3.我们在Ruby 1.9.2下的Rails 2.3.14中看到它。
给出的connection_pool.rb补丁对我们有用。该特定文件在2.3.14和3.1.0 beta之间似乎相同,因此补丁同样相同。我们不得不修补gem本身 - 通过加载新文件/类来实现它作为Rails应用程序本身的一部分本身没有做到 - 但我们的行为与报告的相同 - 而不是死锁/数据库连接耗尽,有一个短暂的延迟。与在database.yml中的生产db配置中增加池大小相结合,这非常可接受,但我希望有更好的解决方案。
&安培;感谢Alex Caudill为我们找到了这个!