修复了一个Rails / Mysql应用程序的问题,如何防止它再次发生?

我正在运行一个运行Passenger和MySQL的Rails应用,在运行Ubuntu Intrepid的VPS上,今天早些时候,Web服务器停止了能够连接到服务器。 我的例外通知程序发送给我一个消息,出现这个错误:

ActionView::TemplateError: Mysql::Error: MySQL server has gone away: SELECT * FROM `table_name` WHERE (`table_name`.`id` = 70) 

在试图打开mysql的vps中,给了我这个:

 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

我通过停止apache来清除这个错误,重新启动数据库服务器,并重新启动乘客,这似乎有一切嗡嗡声再次罚款,但这并不能解决这个问题,为什么这件事发生在第一位。

我应该找哪些地方find这个错误的原因? (除了production.log,或者是一个/ var / log),所以我可以在将来避免这种情况,并且看到这个问题很简单,如果这些情况再次发生,值得自动重启两台服务器未来?

当MySQL数据库closures由Rails应用程序打开的持续连接时,会发生这个问题。 当您的Rails应用程序长时间闲置(> =在mysqlconfiguration中定义的连接closures时间)而没有请求时,会发生这种情况。

您可能想要在mysql设置中增加连接到期时间 – 或者写一个cron作业来保持从rails应用程序中获取一些dynamic页面(这样rails就可以保持db处理的新鲜度)。