PG::ConnectionBad 与 rails 和 pgbouncer

PG::ConnectionBad with rails and pgbouncer

我有 rails 和 pgBouncer,我在 database.yml 中有 reconnect: true,但我一直在控制台中得到这个:

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

同样的错误发生在 sidekiq 而不是在 web 中,出现此错误后 rails 不应该重新连接吗?

这是服务器中配置的超时(我不知道)。所以它与 rails/pgbouncer 没有任何关系,事实上 database.yml 中的 reconnect 标志在 rails.

中不再使用

也许设置以下Postgresql配置参数是一个解决方案。

tcp_keepalives_idle(整数)

指定 TCP 应向客户端发送保活消息之前不活动的秒数。值 0 使用系统默认值。此参数仅在支持 TCP_KEEPIDLE 或等效套接字选项的系统以及 Windows 上受支持;在其他系统上,它必须为零。在通过 Unix 域套接字连接的会话中,此参数将被忽略并始终读取为零。

tcp_keepalives_interval(整数)

指定在多少秒后应重新传输客户端未确认的 TCP keepalive 消息。值 0 使用系统默认值。此参数仅在支持 TCP_KEEPINTVL 或等效套接字选项的系统以及 Windows 上受支持;在其他系统上,它必须为零。在通过 Unix 域套接字连接的会话中,此参数将被忽略并始终读取为零。

tcp_keepalives_count(整数)

指定在服务器与客户端的连接被视为失效之前可以丢失的 TCP keepalive 数。值 0 使用系统默认值。此参数仅在支持 TCP_KEEPCNT 或等效套接字选项的系统上受支持;在其他系统上,它必须为零。在通过 Unix 域套接字连接的会话中,此参数将被忽略并始终读取为零。