Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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 on rails Rails如何在后台处理数据库连接?_Ruby On Rails_Database - Fatal编程技术网

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

Ruby on rails Rails如何在后台处理数据库连接?,ruby-on-rails,database,Ruby On Rails,Database,当数据库连接断开时,我正在尝试在rails应用程序中显示特定于控制器的页面。我通过捕获rescue_操作方法中的Mysql::错误并呈现适当的页面来实现这一点。当mysql服务停止时,我很快就会得到mysql::Error异常,我可以毫不延迟地呈现页面 但是,当服务器本身关闭时,rails需要3分钟来抛出Mysql::错误,在5-6次请求之后,整个网站变得没有响应 我试图弄清楚,当mysql服务器关闭时,rails框架中的哪种方法需要这么长的时间。这是一个方法connection.real_co

当数据库连接断开时,我正在尝试在rails应用程序中显示特定于控制器的页面。我通过捕获rescue_操作方法中的Mysql::错误并呈现适当的页面来实现这一点。当mysql服务停止时,我很快就会得到mysql::Error异常,我可以毫不延迟地呈现页面

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

我试图弄清楚,当mysql服务器关闭时,rails框架中的哪种方法需要这么长的时间。这是一个方法connection.real_connect(在active record mysql_适配器文件中),需要3分钟才能返回,但出现异常

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

但当我用数据库启动网站,访问网站一段时间后关闭数据库服务器时,它根本不起作用。整个网站像以前一样没有反应。我想知道这两种情况有什么不同

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

任何帮助对我都是非常有用的


谢谢,

我没有尝试过,但是您可以在database.yml文件中为MySQL连接添加
connect\u timeout
作为指定选项之一(以及端口、主机等)。该值被传递给real_connect调用,以建立到MySQL的连接


此外,由于您在建立初始连接并关闭数据库后遇到延迟,您可能需要使用
read\u timeout
config选项。

我想,我需要使用此修补程序在我的database.yml文件中设置超时。我使用的是旧版本的rails(2.1)是的,我应该在rails 3I中指定添加的配置选项。我添加了这个补丁(我的rails)。并在database.yml文件中设置connect\u timeout read\u timeout和write\u timeout。我想写超时似乎有效(当我刚启动网站就关闭datbase服务器时,没有延迟)。我认为读取超时没有设置,就像我在一段时间后关闭db服务器时一样。网站像以前一样没有响应:(知道为什么会发生这种情况吗?我不确定接下来会发生什么。关于下一步要看什么的想法是1)您使用的是哪个ruby mysql库2)可能是连接池导致了问题,3)可能是TCP等待超时问题?问题似乎是。我试图将值0.3设置为读取超时。1表示连接超时。当我将读取超时更改为1时。成功了。如何将十进制值(如0.5)设置为读写超时??