我在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
但它没有帮助。
你知道什么可以提供帮助吗?
答案 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配置设置中存在导致此超时的错误。