2010-11-30 41 views
2

我试图在数据库连接消失时在我的rails应用程序中显示控制器特定的页面。我通过在rescue_action方法中捕获Mysql :: Error并渲染适当的页面来实现此目的。当单独的mysql服务停止时,我很快得到了Mysql :: Error异常,并且我可以毫不拖延地渲染页面。Rails如何在后台处理数据库连接?

但是当服务器本身关闭时,rails需要3分钟来抛出Mysql :: Error,并且在5-6之后请求整个网站变得没有响应。

我试图弄清楚,当MySQL服务器关闭时,rails框架中的哪个方法需要这么长时间。这是一个connection.real_connect(在活动记录mysql_adapter文件中)的方法,花了3分钟返回一个异常。

所以我决定超时使用systemTimer gem这个方法。这个猴子补丁工作完美,当我启动与数据库连接的网站,并立即关闭数据库服务器。

但是,当我用数据库启动网站,并访问网站一段时间,然后关闭数据库服务器,它根本无法工作。整个网站像以前一样变得反应迟钝。我想知道这两种情况有什么区别。

我想我需要更详细地了解有关轨道如何处理数据库连接。数据库连接关闭时它如何起作用。这样我就可以确定确切的地方,我可以放猴子补丁,并使其符合我的spefic要求。我没有看到任何相关的文章解释这一点。

任何帮助将是我

感谢非常有用的,

回答

4

我还没有试过,但您可以添加connect_timeout作为指定的选项之一(含港,主机等一起) database.yml文件中的MySQL连接。该值被传递给real_connect调用以建立与MySQL的连接。

此外,由于在进行初始连接并关闭数据库后遇到延迟,因此可能需要使用read_timeout配置选项。

+0

我想,我需要把这个补丁https://github.com/rails/rails/commit/d3a802cee0f8cbe209af8886f8f8e8cab204d21a在我的database.yml文件中设置超时。我使用的是旧版本的rails(2.1) – anusuya 2010-11-30 19:05:25