Heroku + Rails + PG: ActiveRecord:: StatementInvalid (PG:: ConnectionBad: PQconsumeInput() Соединение SSL неожиданно закрыто

Я получаю случайным образом и очень часто следующую ошибку в моих журналах:

Nov 06 05:31:21 lmrapp app/web.2:  [wbinternacional] [0f0965e3-e537-4aed-8f3e-311a222e8fa1] PG::ConnectionBad: PQconsumeInput() SSL connection has been closed unexpectedly 
Nov 06 05:31:21 lmrapp app/web.2:  [wbinternacional] [0f0965e3-e537-4aed-8f3e-311a222e8fa1] Completed 500 Internal Server Error in 23ms 
Nov 06 05:31:21 lmrapp app/web.2:  FATAL:  terminating connection due to administrator command 
Nov 06 05:31:21 lmrapp app/web.2:  ActiveRecord::StatementInvalid (PG::ConnectionBad: PQconsumeInput() SSL connection has been closed unexpectedly 

Может ли это быть связано с лимитом соединения моего плана Pg на герою (у меня есть "Хобби-базовый", который имеет 20 соединений)?

Спасибо

Ответ 1

Я получаю ту же ошибку. Я также участвую в Хероку Хобби-базовом дБ. Я поднял билет с Героку, вот ответ:

Ошибка "SSL-соединение была неожиданно закрыта" (и несколько аналогичных) - это ошибка на стороне клиента, указывающая на то, что соединение с базой данных исчезло. Одним из ограничений баз данных уровня хобби является немедленное обслуживание. Иногда нам нужно закрыть некоторые подключения к базам данных уровня хобби, и когда мы это сделаем, приложение часто увидит ошибку, подобную этой.

Большинство приложений, поддерживающих пул соединений (например, ActiveRecord in Rails), могут просто открыть новое соединение с базой данных. Однако в некоторых случаях приложение не сможет повторно подключиться. Если это произойдет, вы можете повторно запустить этот dyno-диск, чтобы получить новый процесс в новой среде выполнения.

Запуск баз данных хоббинга в производстве обычно не рекомендуется. Однако, если вы собираетесь это сделать, полезно настроить ваше приложение для фактического сбоя при повторных ошибках подключения к базе данных - таким образом, он будет запускаться в новой среде выполнения с новым пулом соединений автоматически.

Похоже, что это часто случалось с вами; В этом случае я бы рекомендовал pgbackups: transfer переместить базу данных на другой общий сервер. Имейте в виду, что правила уровня хобби применяются к основному плану за 9 долларов, а также к бесплатной базе данных. Дайте мне знать, если у вас возникнут дополнительные вопросы. Спасибо!

Для меня это в основном означает, что Heroku не хочет исправлять эту ошибку и хочет, чтобы вы обновили до базы данных за 50 долларов. Теперь я запускаю небольшой сайт, где я получаю 4-5 пользователей в день - на данный момент я не хочу переключаться на производственный сайт. Я получаю ту же ошибку, о которой вы говорили, по крайней мере 5-6 раз в день, и до сих пор не выяснили, как это исправить. Попробуйте переключить свой db на другой общий сервер - это не работает для меня.

Ответ 2

Я получаю эту проблему все время, и это очень раздражает. Особенно, когда вы пытаетесь создать приложение и не хотите платить 50 долларов в месяц в процессе разработки. Одна из самых больших вещей, которые я заметил, заключается в том, чтобы убедиться, что у вас нет чего-то вроде DB Visualizer или другой СУБД, работающей во время разработки. Я знаю, что это похоже на интуитивно понятный, но он определенно помогает освободить пул db.

Кроме того, если вы используете RoR, вы можете попробовать добавить pool: 1 к своей строке подключения по умолчанию, чтобы ваше приложение не пыталось подключиться к postgres больше, чем ваши настройки postgres позволят использовать Heroku.

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 1

Надеюсь, это поможет некоторым людям!