PG::ConnectionBad с рельсами и pgbouncer

У меня есть рельсы и pgBouncer, и у меня есть reconnect: true в database.yml но я продолжаю получать это в консоли:

ActiveRecord::StatementInvalid: PG::ConnectionBad: PQconsumeInput() server closed the connection unexpectedly

Та же ошибка происходит в sidekiq, но не в сети. Разве рельсы не должны переподключаться после этой ошибки?

1 ответ

Решение

Это был тайм-аут на сервере (о котором я не знал). Так что это не имеет никакого отношения к rails/pgbouncer, на самом деле reconnect флаг в database.yml больше не используется в рельсах.

Может быть, это решение для настройки параметров конфигурации Postgresql ниже.

tcp_keepalives_idle (целое число)

Указывает количество секунд бездействия, по истечении которых TCP должен отправить клиенту сообщение поддержки активности. Значение 0 использует системное значение по умолчанию. Этот параметр поддерживается только в системах, которые поддерживают TCP_KEEPIDLE или эквивалентный параметр сокета, и в Windows; в других системах оно должно быть равно нулю. В сеансах, подключенных через сокет Unix-домена, этот параметр игнорируется и всегда читается как ноль.

tcp_keepalives_interval (integer)

Задает количество секунд, по истечении которых сообщение подтверждения активности TCP, которое не было подтверждено клиентом, должно быть передано повторно. Значение 0 использует системное значение по умолчанию. Этот параметр поддерживается только в системах, которые поддерживают TCP_KEEPINTVL или эквивалентный параметр сокета, и в Windows; в других системах оно должно быть равно нулю. В сеансах, подключенных через сокет Unix-домена, этот параметр игнорируется и всегда читается как ноль.

tcp_keepalives_count (целое число)

Задает количество сообщений поддержки активности TCP, которые могут быть потеряны до того, как соединение сервера с клиентом будет считаться прерванным. Значение 0 использует системное значение по умолчанию. Этот параметр поддерживается только в системах, которые поддерживают TCP_KEEPCNT или эквивалентную опцию сокета; в других системах оно должно быть равно нулю. В сеансах, подключенных через сокет Unix-домена, этот параметр игнорируется и всегда читается как ноль.

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