Rails ActiveRecord checkout_timeout设置被忽略

时间:2014-12-05 08:29:38

标签: ruby-on-rails activerecord timeout

我有以下初始化程序。

/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 :(得分:0)

idk,如何通过配置对象设置config.checkout_timeout,如果在database.yaml中它应该是可能的,并且该文件也应该被erb解析,允许你在其中使用ENV变量,如下所示:

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

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

 config.checkout_timeout  = 5
然而,我不会感到惊讶,两者都是可能的。 并且不要忘记重启rails服务器并在(spring stop

之前杀死spring

答案 1 :(得分:0)

checkout_timeout用于PostgreSQL数据库; checkout用于SQLite数据库;

这可能是问题,错误的变量名称?