Rails 6.1多数据库配置下PgHero连接池未找到错误求助
问题:PgHero在Rails多数据库主从配置下随机崩溃
- 环境:Ruby on Rails 6.1,配置了主从分离的多数据库架构,通过自定义
CustomDatabaseResolver实现数据库负载分配,代码如下:
class CustomDatabaseResolver < ActiveRecord::Middleware::DatabaseSelector::Resolver def read_from_primary? super || rand(2).zero? end end
- 问题现象:PgHero仪表盘会随机崩溃,抛出以下错误:
ActiveRecord::ConnectionNotEstablished No connection pool for 'PgHero::Connection::Database337600' found.
尝试过的解决方案:尝试强制PgHero控制器使用主库,但未成功,实现代码如下:
# config/initializers/pghero.rb Rails.application.reloader.to_prepare do PgHero::HomeController.send :include, WriterDbRoleExecutor end # app/controllers/concerns/writer_db_role_executor.rb module WriterDbRoleExecutor extend ActiveSupport::Concern included do around_action { |_controller, action| ApplicationRecord.force_writer_db_role(&action) } end end补充说明:相同的强制主库方法对Blazer gem有效,代码如下:
Rails.application.reloader.to_prepare do Blazer::BaseController.send :include, WriterDbRoleExecutor end
内容的提问来源于stack exchange,提问作者DenisKo
相关产品推荐
相关产品推荐

