Rails 6新建应用PostgreSQL数据库Peer认证失败求助
PostgreSQL Peer认证失败的解决思路
1. 调整PostgreSQL认证规则
Ubuntu下PostgreSQL的认证配置文件默认路径为/etc/postgresql/<你的PG版本>/main/pg_hba.conf。找到本地连接规则(local开头的行):
- 若当前规则为
local all all peer,Peer认证要求系统用户名与数据库用户名完全一致。执行id lmt检查系统是否存在lmt用户,不存在则用sudo useradd lmt创建。 - 或者将认证方式改为
md5(需密码)或trust(本地开发无密码):
修改后重启服务:local all all md5sudo systemctl restart postgresql
2. 强制使用TCP连接绕开Peer认证
在database.yml的development/test块中添加host: localhost,强制PostgreSQL使用TCP连接而非socket Peer认证:
development: <<: *default database: lmt_development username: lmt host: localhost password: <你的lmt用户密码> # 若用md5认证需填写
3. 验证数据库用户有效性
确认lmt用户存在且权限正确:
# 检查用户是否存在 sudo -u postgres psql -c "SELECT usename FROM pg_user WHERE usename='lmt';" # 重新授予数据库权限 sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE lmt_development TO lmt;"
4. 对比其他应用的配置差异
既然之前其他应用无问题,对比两个应用的database.yml,检查是否有隐藏配置差异(如host、password字段),同时确认是否使用同一PostgreSQL实例,是否有自定义认证规则。
内容的提问来源于stack exchange,提问作者John Cowan
相关产品推荐
相关产品推荐

