You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails服务启动但无法为reading角色建立AR连接的解决问询

解决Rails服务器报No connection pool for 'ActiveRecord::Base' found for the 'reading' role错误

问题核心

重装PostgreSQL和pg gem后,Rails控制台可正常连接数据库,但服务器抛出连接池错误,根源是读写分离配置的角色映射不匹配或数据库权限/连接参数异常。


解决方案步骤

1. 修正config/database.yml配置

如果不需要读写分离,直接简化为单数据库配置(删除primary_replica节点):

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_production
  username: myapp
  password: <%= ENV["MYAPP_DATABASE_PASSWORD"] %>

如果需要保留读写分离,确保primary_replica节点配置正确且关联reading角色:

production:
  primary:
    <<: *default
    database: myapp_production
    username: myapp
    password: <%= ENV["MYAPP_DATABASE_PASSWORD"] %>
  primary_replica:
    <<: *default
    database: myapp_production
    username: myapp_readonly
    password: <%= ENV["MYAPP_DATABASE_REPLICA_PASSWORD"] %>
    replica: true

2. 配置ActiveRecord角色映射

在config/application.rb或对应环境配置文件(如config/environments/production.rb)中添加角色映射规则:

# 启用读写分离的角色映射
config.active_record.role_mappings = { reading: :primary_replica }
# 可选:启用自动读写分离中间件
config.active_record.database_selector = { delay: 2.seconds }
config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver
config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session

3. 重新安装pg gem(指定正确的pg_config路径)

先找到当前PostgreSQL的pg_config位置:

which pg_config

(Homebrew新版默认路径为/opt/homebrew/bin/pg_config,旧版可能在/usr/local/bin,但你的/usr/local为空,大概率是前者)

然后重新安装pg gem:

gem uninstall pg
gem install pg -- --with-pg-config=/opt/homebrew/bin/pg_config

4. 验证PostgreSQL数据库与用户权限

登录PostgreSQL控制台检查:

psql -U postgres
  • 确认目标数据库存在:
    \l
    
  • 确认数据库用户有连接权限:
    GRANT CONNECT ON DATABASE myapp_production TO myapp;
    -- 如果用读写分离,给只读用户授权
    GRANT CONNECT ON DATABASE myapp_production TO myapp_readonly;
    

5. 清理缓存并重启服务器

# 清理Rails临时文件和缓存
rails tmp:clear
# 生产环境额外清理资产缓存
rails assets:clean
# 重启服务器(以puma为例)
puma restart -C config/puma.rb

内容的提问来源于stack exchange,提问作者Jerome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:20:31