我有一个带有Postgres数据库的Rails应用程序,在AWS下,它具有多属性的体系结构。RDS使用的HA体系结构是主/从结构,它们为服务提供一个指向当前主服务器的端点。
每当出现数据库故障转移时,活动记录将继续尝试连接到同一台服务器,而不是重新尝试连接,以便为主服务器获取新的IP。
是否有一种方法可以为ActiveRecord::StatementInvalid: PG::ConnectionBad: PQsocket() can't get socket descriptor
错误创建一个“全局”补救方案,该错误只是运行ActiveRecord::Base.connection_pool.disconnect!
,从而使下一个查询工作正常?
发布于 2017-02-09 15:39:39
通过向postgres_adapter
应用猴子补丁,我能够在故障转移事件之后重新连接活动记录。
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, name, 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
https://stackoverflow.com/questions/36582380
复制相似问题