【问题标题】:Rails PgBouncer client_idle_timeoutRails PgBouncer client_idle_timeout
【发布时间】:2019-08-09 22:19:33
【问题描述】:


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

红宝石 2.0.0
导轨 4.2.3
第 0.17.1 页

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

错误:client_idle_timeout
合约负载 (0.5ms) 选择 "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 "contracts"."id" ASC LIMIT 1

【问题讨论】:

  • 是的,我遇到了类似的问题,问题是配置的空闲超时,您必须增加它,否则您无法在控制台中执行任何操作。当 rails 执行查询并在连接消失后尝试手动重新连接活动记录时,您可以进行大量的尝试/捕获。
  • @MaicolBen 它不是一个修复程序。关于我认识的那两个。我正在寻找解决此问题的方法,而不是解决问题。例如,每次发生这种情况时都重新连接。

标签: ruby-on-rails psql pgbouncer


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-07-06
    • 2014-01-14
    • 2019-07-27
    • 1970-01-01
    • 2020-04-02
    • 2019-12-20
    • 2018-01-16
    • 2019-10-28
    • 2022-01-18
    相关资源
    最近更新 更多