加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails Postgres重新连接RDS的故障转移

发布时间:2020-12-17 04:16:25 所属栏目:百科 来源:网络整理
导读:我在AWS RDS下使用带有多-zo架构的Postgres数据库的Rails应用程序. RDS使用的HA架构是主/从,它们为服务提供指向当前主站的单个端点. 每当有数据库故障转移时,Active Record将继续尝试连接到同一服务器,而不是重试连接以获取主服务器的新IP. 有没有办法为Acti
我在AWS RDS下使用带有多-zo架构的Postgres数据库的Rails应用程序. RDS使用的HA架构是主/从,它们为服务提供指向当前主站的单个端点.

每当有数据库故障转移时,Active Record将继续尝试连接到同一服务器,而不是重试连接以获取主服务器的新IP.

有没有办法为ActiveRecord创建一个“全局”救援:: StatementInvalid:PG :: ConnectionBad:PQsocket()无法获得仅运行ActiveRecord :: Base.connection_pool.disconnect的套接字描述符错误!这将使下一个查询工作?

解决方法

通过对postgres_adapter应用猴子补丁,我能够在故障转移事件后重新连接Active Record.

LIB / core_ext / active_record / postgresql_adapter.rb:

require 'active_record/connection_adapters/postgresql_adapter'

class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
  private
  def exec_no_cache(sql,name,binds)
    log(sql,binds) { @connection.async_exec(sql,[]) }
  rescue ActiveRecord::StatementInvalid => e
    if e.to_s.include?('PG::ConnectionBad')
      ActiveRecord::Base.connection_pool.disconnect!
    end
    raise e
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读