如何增加ActiveRecord连接超时?

时间:2013-04-16 03:10:05

标签: ruby-on-rails ruby activerecord

有没有办法增加ActiveRecord的连接超时?

当我有超过25个线程大小为5的线程时,我一直收到此错误。

  

(ActiveRecord :: ConnectionTimeoutError)“无法在5秒内获得数据库连接(等待5.000144774秒)。最大池大小目前是3;考虑增加它。”

如果没有办法增加连接超时,那么确保线程尽可能快地使用连接的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

您可以添加

pool: 5

在您的database.yml。

您也可以设置checkout_timeout值,但我不建议它,因为您的应用程序可能需要更长时间才能回答它。如果在系统处于许多请求时抛出错误,那么最好只提供更多可能的同时连接,而不是让每个请求等待更长时间才能完成。

答案 1 :(得分:2)

根据docs,您应该在数据库配置文件中设置“checkout_timeout”选项。

  

checkout_timeout:阻止并等待连接的秒数   在放弃并引发超时错误之前(默认为5秒)。

答案 2 :(得分:-1)

在数据库配置(例如config/database.yml)中,您可以在几秒钟内为每个数据库连接设置连接超时:

例如,要将connection-timeout设置为30秒:

production:
  host: HOST
  port: 5432
  connect_timeout: 30
  ...

默认连接超时似乎是60秒,即使这个值可能取决于您使用的适配器(例如,使用PostgreSQL适配器)。