jruby activerecord-jdbc-adapter连接池在socketTimeout之后没有重新连接

时间:2018-03-19 07:33:43

标签: ruby-on-rails ruby activerecord jruby activerecord-jdbc

我使用的是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)

1 个答案:

答案 0 :(得分:0)

首先,如果你在JRuby下,你就不能使用mysql2 gem。

您正在使用JDBC驱动程序(jdbc-mysql gem - 您已正确识别)。

reconnect: true应该有效(映射到autoReconnect: true属性),而不重新连接AR的池可能无法正确检测到无效连接。这可能实际上取决于Rails版本到版本,也可能被认为是activerecord-jdbc-adapter错误。