我正在使用 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/