gpt4 book ai didi

ruby - 如何在 Heroku 上修复 "sequel::DatabaseDisconnectError - Mysql::Error: MySQL server has gone away"

转载 作者:行者123 更新时间:2023-12-01 02:16:30 25 4
gpt4 key购买 nike

我有一个简单的 Sinatra 应用程序托管在 Heroku 上,并使用 Sequel 通过 ClearDB 插件连接到 MySql 数据库。

该应用程序工作正常,除非它闲置超过一分钟。在这种情况下,我发出的第一个请求给出了“500 内部服务器错误”,即 heroku logs显示为:

sequel::DatabaseDisconnectError - Mysql::Error: MySQL server has gone away

如果我在出现此错误后刷新页面,则它工作正常,并且直到应用程序闲置一分钟左右,错误才会返回。

该应用程序正在运行两个 dyno,因此问题不是由您可能在免费帐户上看到的 Heroku dyno 空闲引起的。我联系了 ClearDB 支持,他们给了我以下建议:

if you are using connection pooling, then you should set the idle timeout at just below 60 seconds and/or set a keep-alive as I mentioned below. If you are not using connection pooling, then you must make sure that the app actually closes connections after queries and doesn't rely on the network timeout to shut them down.



我知道我可以创建一个 cron 作业来每 30 秒左右访问一次服务器,但这似乎是一个不雅的问题解决方案。关于确保应用程序关闭连接的另一个建议我不明白。我只是使用 Sequel 进行查询,我假设 Sequel 在幕后为我管理连接。我是否需要对其进行配置以确保它关闭连接?我该怎么做?

最佳答案

您的连接超时,这没什么大不了的。如果添加 connection_validator,Sequel 可以处理这种情况。扩展到您的数据库:

DB.extension(:connection_validator)

documentation 中所述这个扩展

"detects an invalid connection, […] removes it from the pool and tries the next available connection, creating a new connection if no available connection is valid"

关于ruby - 如何在 Heroku 上修复 "sequel::DatabaseDisconnectError - Mysql::Error: MySQL server has gone away",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24289991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com