2014-01-13 75 views
5

我遇到了在Heroku上部署應用程序的問題。 它在本地env上工作正常,但是當部署到Heroku時,通常存在應用程序錯誤。Heroku上的ConnectionTimeoutError與Postgres

在日誌中的例外是: 的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 

,但它並沒有幫助。

你有什麼想法可以幫助嗎?

回答

1

您發佈的代碼示例是合法的。在您的Heroku配置環境中有可能導致問題。

您看到的錯誤將表明您的DB_POOL值設置得太低。此錯誤表示應用程序服務器內的超時等待檢查連接池外,不一定是連接失敗。是否有可能您的DB_POOL設置爲1或較低的值?

您還應該驗證您的數據庫配置是否已完成,您是否擁有完整的主機名,憑據和配置,以便使用默認的數據庫配置。您可以在Heroku控制檯中運行以下內容:

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

在導致此超時的Heroku配置設置中有不正確的地方。

+0

感謝您的回答!我會查一下。 – nataliastanko

5

您的數據庫池不是問題。這是一個known rails issue。如果您使用的是Rails 4.0.2,那麼聲明就是在您的Gemfile中使用rails master。我也遇到過這個問題,但是我還沒有嘗試過這個解決方案。

+3

感謝您的支持!我剛剛從4.0.3升級到4.0.4,並解決了問題。留下另一個問題,但嘿。 – Evolve

+0

我的第二個錯誤是'NoMethodError:未定義的方法環境'爲零:NilClass'導致heroku不能部署。我將sass-rails從4.0.1升級到4.0.3,並修復了這個次要問題。 – Evolve

+6

我在rails 4.1.1上,並且這個錯誤仍然沒有明顯的原因發生...... – Daniel