Rails 7执行rake db:migrate时出现PG::ConnectionBad错误求助
解决Rails 7中
rake db:migrate的Postgres密码认证失败问题 以下是针对该问题的具体排查和解决方向:
检查Postgres的
pg_hba.conf认证配置- 先定位
pg_hba.conf文件路径:psql -U postgres -c 'SHOW hba_file;' - 打开该文件,核对连接规则:
- 针对报错中提到的socket连接,找到开头为
local的条目,确保认证方式为md5或trust:local all all md5 - 针对localhost的TCP连接,找到
host类型且地址为127.0.0.1/32的条目,同样确认认证方式为md5或trust
- 针对报错中提到的socket连接,找到开头为
- 修改后重启Postgres服务:
brew services restart postgresql
- 先定位
排查pgsync配置的影响
pgsync的配置文件(通常为.pgsync.yml或config/pgsync.yml)可能覆盖Rails的数据库参数:- 检查该文件中development环境的
password字段,确保与database.yml一致 - 若暂时无需使用pgsync,可重命名该配置文件,再测试
rake db:migrate
- 检查该文件中development环境的
验证环境变量是否干扰配置
系统环境变量可能覆盖database.yml的密码设置:- 在终端执行以下命令排查冲突变量:
echo $PGPASSWORD echo $RAILS_DATABASE_PASSWORD - 若变量为空或值错误,可通过
unset PGPASSWORD命令清除后重试
- 在终端执行以下命令排查冲突变量:
确认postgres用户的密码状态
验证密码是否正确生效:psql -U postgres -c "SELECT usename, passwd FROM pg_shadow WHERE usename='postgres';"若
passwd字段不以md5开头,需重新设置密码:ALTER USER postgres PASSWORD 'postgres';模拟Rails连接参数测试Postgres
直接用psql模拟Rails的连接逻辑,验证Postgres本身是否正常:psql -h localhost -U postgres -d MHV_2023_development -p 5432输入密码
postgres,若能连接则问题出在Rails配置加载环节;若失败则需排查Postgres的用户/数据库权限重置Rails缓存与Spring
Rails可能缓存了旧配置,执行以下命令重置:rails tmp:clear spring stop rake db:migrate
内容的提问来源于stack exchange,提问作者Liz
相关产品推荐
相关产品推荐

