Rails如何在后台处理数据库连接?

时间:2010-11-30 16:30:02

标签: ruby-on-rails database

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

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

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

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

但是,当我使用数据库启动网站,并访问网站一段时间然后关闭数据库服务器时,它完全可以工作。并且整个网站变得像以前一样没有反应。我想知道两种情况之间有什么区别。

我想我需要更详细地了解rails如何处理数据库连接。它在数据库连接关闭时如何反应。所以我可以确定我可以放置猴子补丁的确切位置,并使其适用于我的特殊要求。我没有看到任何相关文章解释这一点。

任何帮助对我都非常有用

谢谢,

1 个答案:

答案 0 :(得分:4)

我没试过这个,但你可以在database.yml文件中添加connect_timeout作为MySQL连接的指定选项之一(连同端口,主机等)。该值传递给real_connect调用以建立与MySQL的连接。

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