首页 > 解决方案 > Rails PgBouncer client_idle_timeout

问题描述


我的问题是 pgbouncer 正在断开连接。系统管理员将client_idle_timeout设置为 60 秒。对此有什么解决方案吗?我的意思是,是否有可能(宝石或设置)连接和断开连接(重新连接)到数据库我们要发送的每个查询?

红宝石 2.0.0
轨道 4.2.3
pg 0.17.1

当连接长于 x 秒时,我收到以下错误(例如,当我打开 rails 控制台时,等待 x 秒,然后对 db 运行一些 ActiveRecord 查询):

错误:client_idle_timeout
Contract Load (0.5ms) SELECT "contracts".* FROM "contracts" ORDER BY "contracts"."id" ASC LIMIT 1
PG::ConnectionBad: PQconsumeInput() SSL 连接已意外关闭:
SELECT "contracts" .* FROM "contracts" ORDER BY "contracts"."id" ASC LIMIT 1
ActiveRecord::StatementInvalid: PG::ConnectionBad: PQconsumeInput() SSL 连接已意外关闭:
SELECT "contracts".* FROM "contracts" ORDER BY "合同"."id" ASC LIMIT 1

标签: ruby-on-railspsqlpgbouncer

解决方案


调用ActiveRecord::Base.clear_active_connections!会将过时的连接返回到线程池并检查新连接,因此您不必重新启动控制台/服务器


推荐阅读