Rails ActiveRecord 忽略 checkout_timeout 设置

3
我有以下初始化程序。
/config/initializers/database_connection.rb:
Rails.application.config.after_initialize do
  ActiveRecord::Base.connection_pool.disconnect!

  ActiveSupport.on_load(:active_record) do
    config = Rails.application.config.database_configuration[Rails.env]
    config['reaping_frequency'] = (ENV['DB_REAP_FREQ'] || 5).to_i # seconds
    config['pool']              = (ENV['DB_POOL'] || 15).to_i
    config['checkout_timeout']  = (ENV['DB_CHECKOUT_TIMEOUT'] || 25).to_i # seconds
    ActiveRecord::Base.establish_connection(config)
  end
end

我仍然遇到以下错误:
ActiveRecord::ConnectionTimeoutError - could not obtain a database connection within 5.000 seconds (waited 6.940 seconds)

增加的超时时间(25秒)被忽略了,超时仍然在5秒后发生。

我应该如何设置checkout_timeout?

2个回答

0

checkout_timeout是针对PostgreSQL数据库的; checkout是针对SQLite数据库的;

这可能是问题所在,变量名写错了吗?


我不太确定这是正确的。我尝试在我的pg数据库上使用checkout_timeout,但没有效果。然而,我的连接错误可能与超时无关。 - David Hempy

-1

我不知道如何通过config对象设置config.checkout_timeout,但是这应该可以在database.yaml中实现,并且该文件也应该被erb解析,允许您在其中使用环境变量,就像这样:

production:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  checkout_timeout: <%= ENV['TIMEOUT'] %>

我也不知道如何通过哈希访问来设置配置属性,只能通过属性来设置。

 config.checkout_timeout  = 5

但我不会感到惊讶,两者都是可能的。 在重启Rails服务器之前别忘了杀掉Spring (spring stop)。


database.yml在生产环境中不使用。连接字符串来自ENV['DATABASE_URL']。 - Jacob
这种做法绕过了问题,但并没有解决它。 也许问题出在参数的命名方式上,或者是该版本的数据库是否允许该参数,而不是配置的方式。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接