【问题标题】:ConnectionTimeoutError on Heroku with PostgresHeroku 上的 ConnectionTimeoutError 与 Postgres
【发布时间】:2014-02-01 20:06:34
【问题描述】:

我在 Heroku 上部署的应用程序出现问题。 它在本地环境中运行良好,但在部署到 Heroku 时经常会出现应用程序错误。

日志中的异常是: ActiveRecord::ConnectionTimeoutError (could not get a database connection within 5.000 seconds (waited 5.000 seconds))

控制器和模型没有什么花哨的,而是简单的 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

但它没有帮助。

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

【问题讨论】:

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


    【解决方案1】:

    您发布的代码示例是合法的。您的 Heroku 配置环境中可能有一些问题。

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

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

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

    您的 Heroku 配置设置中有一些不正确的内容导致此超时。

    【讨论】:

    • 感谢您的回答!我会检查的。
    • 我增加了config/database.yml 中的值,这为我解决了这个问题。我认为默认值为 5,但在 Heroku 上,最大池取决于配置的数据库和层
    【解决方案2】:

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

    【讨论】:

    • 谢谢!我刚刚从 4.0.3 升级到 4.0.4,它解决了这个问题。给我留下了另一个问题,但是嘿。
    • 我的次要错误是 'NoMethodError: undefined method `environment' for nil:NilClass' 导致 heroku 无法部署。我将 sass-rails 从 4.0.1 升级到 4.0.3,它解决了这个次要问题。
    • @Daniel 显然这将最终在 Rails 4.2 中修复,请参阅上面链接中的最后一条评论
    猜你喜欢
    • 2016-12-26
    • 2013-09-24
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    相关资源
    最近更新 更多