我有一个 Rails 应用程序,我很少提供 XML。这是使用 mongrel 和 mysql 运行的。我发现,如果我不使用该应用程序超过几个小时,它就会死机并开始抛出 Errno::EPIPE 错误。mysql 连接似乎因不活动或类似原因而超时。

可以使用 'mongrel_rails restart -P /path/to/the/mongrel.pid' 重新启动...但这并不是真正的解决方案。我的合作者希望当他工作时该应用程序就在那里(而我很可能不在身边)。

我的问题是:

  • 我该怎么做才能从一开始就防止这个问题发生?(例如。别耽误我!!)。
  • 如果失败,是否可以在某处插入一些代码来自动重新建立数据库连接?
有帮助吗?

解决方案

这是一个解决方案:

https://boxpanel.blueboxgrp.com/public/the_vault/index.php/Mongrel_/_MySQL_Timeout

对我来说,上述解决方案的超时似乎有点高。由于连接可以使用的内存量,您不希望数据库超时太低。如果某个连接是孤立的,您希望它合理地超时(比如不要在一周内超时)。

其他提示

在其他地方,我也得到了以下建议:

  1. 尝试设置config.active_record.verification_timeout 比您的MySQL连接超时设置要低的东西。

  2. 有一个 gem 可以解决这个问题: mysql_retry_lost_connection

     http://rubyforge.org/projects/zventstools/
     "Reconnect to the MySQL server when you hit a lost connection error".
    
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top