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 域套接字连接的会话中,此参数将被忽略并始终读取为零。
我有 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 域套接字连接的会话中,此参数将被忽略并始终读取为零。