mysql - 我应该如何处理 Ruby Sequel 中的连接超时?

标签 mysql ruby rack sequel

我正在使用 Sequel 从 Rack Web 应用程序与 MySQL 数据库进行通信。有时,应用程序处于空闲状态的时间足够长,以至于超过了服务器上的 wait_timeout(我们将其保留为默认的 8 小时)。该异常表明我们可以启用 autoReconnect,但显然这是 not encouraged 。无论如何,在这种情况下,我仍然会遇到异常,并且必须重试该操作。

如果 autoReconnect 是一个不好的模式,我应该使用什么模式?我想做的是

DB["myDB"].pool.hold do | conn |
  ... do stuff
end

但是如果连接失效,当然会抛出异常。我可以将整个事情包装为开始救援,然后再试一次,但如果我有一个很大的池,我最终可能会重试 10 或 20 次才能找到一个有效的。

最佳答案

共有三种可能的解决方案:

1)增加wait_timeout。

2) 使用 cron 作业,以便比 wait_timeout 更频繁地使用连接。

3)使用connection_validation扩展,它可以在检测到断开连接时透明地处理重新连接。

关于mysql - 我应该如何处理 Ruby Sequel 中的连接超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13858813/

相关文章:

ruby - 如果嵌套数组为空,如何检查 ruby​​?

ruby - 使用凯撒密码时如何保留字符大小写

python - 说服其他人使用 Ruby 而不是 Python 和 PHP

mysql - Entity Framework Core Linq 其中 NULL 不起作用

php - 修改从 PDO 和 PHP 生成的 json

ruby - 壳外薄

ruby-on-rails - Omniauth:如何在运行时设置身份验证提供程序详细信息

ruby - @app.call(env) 到底做了什么?

java - JDBC : Operation not allowed after ResultSet closed

mysql - 查找每个成员的 min() 和第二个 min()