Rails项目连接PostgreSQL失败提示服务器未运行问题求助
问题根因定位:PostgreSQL 12服务启动失败核心原因
你遇到的权限拒绝绑定127.0.0.1报错,本质是重装PostgreSQL的三类遗留问题:旧进程残留占用5432端口、PostgreSQL运行用户的目录/套接字目录权限异常、postgresql.conf监听配置被篡改。
分步排查解决步骤
- 清理残留进程与无效套接字文件
- 执行命令:
sudo lsof -i :5432查看占用5432端口的进程 - 如果有输出,执行
sudo kill -9 <进程PID>杀掉残留进程,原理:卸载PostgreSQL时如果未先停止服务,旧进程会一直占用5432端口,新服务启动时无法绑定就会触发权限拒绝报错 - 再执行
sudo rm -rf /var/run/postgresql/*清理残留的无效套接字文件,原理:旧进程生成的套接字文件权限属于旧进程,新服务启动时无法覆盖修改,会直接导致套接字创建失败
- 修复目录权限
- 执行命令:
sudo chown -R postgres:postgres /var/run/postgresql /var/lib/postgresql/12/main - 原理:PostgreSQL默认以postgres用户运行,重装时如果手动修改过这两个目录的权限,会导致postgres用户没有写入权限,无法创建监听套接字和读取数据库数据文件
- 验证配置文件正确性
- 编辑PostgreSQL主配置文件:
sudo nano /etc/postgresql/12/main/postgresql.conf - 确认以下配置项的值:
listen_addresses = 'localhost' port = 5432 unix_socket_directories = '/var/run/postgresql' - 原理:如果之前修改过监听地址为无效值,或者端口被篡改,都会导致启动绑定失败
- 重启服务并验证
- 执行重启命令:
sudo service postgresql restart - 执行状态检查命令:
service postgresql status确认返回12/main (port 5432): online即为启动成功 - 再执行
psql -U postgres验证可以正常进入数据库命令行
- 修复Rails数据库连接问题
- 确认你的database.yml开发环境块配置匹配如下:
development: adapter: postgresql encoding: unicode database: gachamons_backend_development pool: 5 username: postgres password: <%= ENV['POSTGRES_PASSWORD'] %> host: localhost port: 5432 - 执行
rake db:drop db:create db:migrate重建开发和测试库,原理:之前残留的development库是旧实例留下的,新实例启动后没有这个库的元数据,删除重建即可消除ActiveRecord::NoDatabaseError报错
后续规避方案
- 卸载PostgreSQL前先执行
sudo service postgresql stop停掉服务,避免残留进程和文件 - 不要手动修改
/var/run/postgresql、/var/lib/postgresql目录的权限 - 重装后先验证PostgreSQL服务状态正常,再执行Rails的数据库操作
内容的提问来源于stack exchange,提问作者adamadolfo
相关产品推荐
相关产品推荐

