Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby “如何修复”;sequel::DatabaseDisconnectError-Mysql::Error:Mysql服务器已经离开了”;论赫罗库_Ruby_Heroku_Sinatra_Sequel_Cleardb - Fatal编程技术网

Ruby “如何修复”;sequel::DatabaseDisconnectError-Mysql::Error:Mysql服务器已经离开了”;论赫罗库

Ruby “如何修复”;sequel::DatabaseDisconnectError-Mysql::Error:Mysql服务器已经离开了”;论赫罗库,ruby,heroku,sinatra,sequel,cleardb,Ruby,Heroku,Sinatra,Sequel,Cleardb,我在Heroku上有一个简单的Sinatra应用程序,使用Sequel通过ClearDB插件连接到MySql数据库 应用程序工作正常,除非它闲置超过一分钟。在这种情况下,我发出的第一个请求给出了一个“500内部服务器错误”,heroku日志显示为: sequel::DatabaseDisconnectError - Mysql::Error: MySQL server has gone away 如果我在此错误后刷新页面,它会正常工作,并且在应用程序空闲一分钟左右之前,错误不会返回 应用程序正

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

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

sequel::DatabaseDisconnectError - Mysql::Error: MySQL server has gone away
如果我在此错误后刷新页面,它会正常工作,并且在应用程序空闲一分钟左右之前,错误不会返回

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

如果您使用的是连接池,那么应该设置空闲 超时时间略低于60秒,并且/或者设置一个保持活动状态的时间 下文提到。如果不使用连接池,则 必须确保应用程序在查询后实际关闭连接 并且不依赖网络超时来关闭它们


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

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

DB.extension(:connection_validator)
如本扩展部分中所述

检测到无效连接,[…]将其从池中删除并尝试下一个可用连接,如果没有有效的可用连接,则创建新连接


嘿,乔纳,我在同一个堆栈上遇到了同样的问题。你有没有想出一个解决办法?