空闲时间后Heroku 500错误 - 续集:: DatabaseDisconnectError - Mysql ::错误:MySQL服务器已经消失

时间:2014-06-18 15:52:08

标签: heroku sinatra sequel cleardb

我在Heroku上托管了简单的sinatra应用程序,并使用Sequel ORM通过cleardb插件连接到MySql数据库。

该应用程序运行正常,除非它闲置超过一分钟。在这种情况下,我发出的第一个请求会产生500内部服务器错误,heroku logs显示为:

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

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

该应用程序正在运行2个dynos,因此问题不是由您在自由帐户上看到的heroku dyno空闲引起的。我联系了cleardb支持,他们给了我这个建议:

  

如果您使用连接池,则应设置空闲   在60秒以下超时和/或设置保持活动为我   如以下所说的。如果您没有使用连接池,那么您   必须确保应用程序在查询后实际关闭连接   并且不依赖于网络超时来关闭它们。

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

1 个答案:

答案 0 :(得分:1)

您的连接超时并不重要。如果您将connection_validator扩展名添加到数据库中,续集可以处理这种情况:

DB.extension(:connection_validator)

docs中所述,此扩展"检测到无效连接,[...]将其从池中删除并尝试下一个可用连接,如果没有可用连接有效则创建新连接&#34 ;