【问题标题】:Rails ActiveRecord checkout_timeout setting ignoredRails ActiveRecord checkout_timeout 设置被忽略
【发布时间】:2014-12-05 08:29:37
【问题描述】:

我有以下初始化程序。

/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?

【问题讨论】:

    标签: ruby-on-rails activerecord timeout


    【解决方案1】:

    idk,如何通过config对象设置config.checkout_timeout,但是在database.yaml中应该可以,而且这个文件也应该是erb解析的,允许你在里面使用ENV vars,像这样:

    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']。
    【解决方案2】:

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

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

    【讨论】:

    • 我不太确定这是真的。我尝试在我的 pg 数据库上使用checkout_timeout,但没有效果。但是,我的连接错误可能与超时无关。
    猜你喜欢
    • 2012-06-05
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多