ConnectionTimeoutError в 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 ответа

Ваш пул БД не является проблемой. Это известная проблема рельсов. Если вы используете Rails 4.0.2, вы должны использовать rails master в своем Gemfile. Я также испытываю эту проблему, однако я еще не пробовал это решение.

Пример кода, который вы разместили, является законным. Вероятно, что-то вызывает проблему в вашей конфигурации среды Heroku.

Ошибка, которую вы видите, будет указывать ваш DB_POOL значение установлено слишком низким. Эта ошибка указывает на тайм-аут на сервере приложений, ожидающий проверки соединения из пула, не обязательно сбой соединения. Возможно ли ваше DB_POOL установлен в 1 или низкое значение?

Вы также должны убедиться, что конфигурация вашей базы данных завершена, что у вас есть полное имя хоста, учетные данные и настройки, заданные из конфигурации базы данных по умолчанию. В консоли Heroku можно запустить следующее:

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

В настройках конфигурации Heroku есть что-то неправильное, что вызывает этот тайм-аут.

Другие вопросы по тегам