【问题标题】:PG::ConnectionBad with rails and pgbouncerPG::ConnectionBad with rails 和 pgbouncer
【发布时间】:2019-07-06 04:28:12
【问题描述】:
我有 rails 和 pgBouncer,我在 database.yml 中有 reconnect: true,但我一直在控制台中得到这个:
ActiveRecord::StatementInvalid: PG::ConnectionBad: PQconsumeInput() server closed the connection unexpectedly
同样的错误发生在sidekiq中,但在web中没有,出现此错误后rails不应该重新连接吗?
【问题讨论】:
标签:
ruby-on-rails
ruby
pgbouncer
【解决方案1】:
这是在服务器中配置的超时(我不知道)。所以它与 rails/pgbouncer 没有任何关系,实际上 database.yml 中的 reconnect 标志在 rails 中不再使用。
【解决方案2】:
也许设置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 域套接字连接的会话中,此参数被忽略并始终读取为零。