Heroku上的ConnectionTimeoutError与Postgres

时间:2014-01-13 21:52:55

标签: heroku ruby-on-rails-4 heroku-postgres

我在Heroku上部署了我的应用程序时出现问题。 它在本地环境中工作正常,但是当部署到Heroku时,通常会出现应用程序错误。

日志中的例外是:     ActiveRecord :: ConnectionTimeoutError(无法在5.000秒内获取数据库连接(等待5.000秒))

控制器和模型没什么特别的,相当简单的CRUD操作。

该应用程序是使用Rails 4构建的,它使用标准的heroku postgres数据库附加组件和WEBrick服务器。

我试图像这样设置配置:

#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 # seconds
    config['pool']              = ENV['DB_POOL']      || 10
    config['timeout']           = ENV['DB_TIMEOUT']   || 10
    ActiveRecord::Base.establish_connection(config)
  end
end

但它没有帮助。

你知道什么可以提供帮助吗?

2 个答案:

答案 0 :(得分:5)

您的数据库池不是问题。这是known rails issue。如果您使用的是Rails 4.0.2,那么声明就是在Gemfile中使用rails master。我也遇到了这个问题,但是我还没有尝试过这个解决方案。

答案 1 :(得分:1)

您发布的代码示例是合法的。在您的Heroku配置环境中可能会出现问题。

您看到的错误表明您的DB_POOL值设置得太低。此错误表示应用程序服务器中的超时,等待检查池中的连接,不一定是连接失败。您的DB_POOL可能设置为1还是低值?

您还应验证数据库配置是否完整,是否具有默认数据库配置中的完整主机名,凭据和配置集。您可以在Heroku控制台中运行以下命令:

Rails.application.config.database_configuration[Rails.env]

Heroku配置设置中存在导致此超时的错误。