我使用的是jruby和mysql2 gem版本mysql2(0.3.11)。 我的database.yml看起来像这样。
production:
<<: *common
database: database
host: host
port: 3306
username: username
password: ********
pool: 5
pool_initial: true
checkout_timeout: 0.3
properties:
connectTimeout: 250
socketTimeout: 90000
在我的情况下,其中一个查询超过了90秒的套接字超时,之后,从池中使用相同连接的每个请求都开始失败。我期待mysql2应该重新连接,但它不是重新连接在我的情况下。我查看了文档但找不到任何内容。
Edit1:我做了一些更多的调试,我在生产中使用activerecord-jdbc-adapter而不是mysql2 gem我尝试使用autoReconnect修复问题:true但看起来不推荐它,因为它可能会搞砸一致性。 http://pages.citebite.com/p4x3a0r8pmhm
Edit2:版本 - jruby(1.7.4)和activerecord-jdbc-adapter(1.2.9.1)
答案 0 :(得分:0)
首先,如果你在JRuby下,你就不能使用mysql2 gem。
您正在使用JDBC驱动程序(jdbc-mysql gem - 您已正确识别)。
reconnect: true
应该有效(映射到autoReconnect: true
属性),而不重新连接AR的池可能无法正确检测到无效连接。这可能实际上取决于Rails版本到版本,也可能被认为是activerecord-jdbc-adapter错误。