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

Rails项目连接PostgreSQL失败提示服务器未运行问题求助

问题根因定位:PostgreSQL 12服务启动失败核心原因

你遇到的权限拒绝绑定127.0.0.1报错,本质是重装PostgreSQL的三类遗留问题:旧进程残留占用5432端口、PostgreSQL运行用户的目录/套接字目录权限异常、postgresql.conf监听配置被篡改。

分步排查解决步骤
  1. 清理残留进程与无效套接字文件
  • 执行命令:sudo lsof -i :5432 查看占用5432端口的进程
  • 如果有输出,执行sudo kill -9 <进程PID> 杀掉残留进程,原理:卸载PostgreSQL时如果未先停止服务,旧进程会一直占用5432端口,新服务启动时无法绑定就会触发权限拒绝报错
  • 再执行sudo rm -rf /var/run/postgresql/* 清理残留的无效套接字文件,原理:旧进程生成的套接字文件权限属于旧进程,新服务启动时无法覆盖修改,会直接导致套接字创建失败
  1. 修复目录权限
  • 执行命令:sudo chown -R postgres:postgres /var/run/postgresql /var/lib/postgresql/12/main
  • 原理:PostgreSQL默认以postgres用户运行,重装时如果手动修改过这两个目录的权限,会导致postgres用户没有写入权限,无法创建监听套接字和读取数据库数据文件
  1. 验证配置文件正确性
  • 编辑PostgreSQL主配置文件:sudo nano /etc/postgresql/12/main/postgresql.conf
  • 确认以下配置项的值:
    listen_addresses = 'localhost'
    port = 5432
    unix_socket_directories = '/var/run/postgresql'
    
  • 原理:如果之前修改过监听地址为无效值,或者端口被篡改,都会导致启动绑定失败
  1. 重启服务并验证
  • 执行重启命令:sudo service postgresql restart
  • 执行状态检查命令:service postgresql status 确认返回12/main (port 5432): online即为启动成功
  • 再执行psql -U postgres 验证可以正常进入数据库命令行
  1. 修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:48:03