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

Rails应用使用Devise时PostgreSQL提示未提供密码问题求助

Rails执行rails db:migrate时PostgreSQL提示fe_sendauth: no password supplied,重装Postgres无效

问题描述

在Rails项目中安装Devise gem并完成配置后,执行rails db:migrate触发以下错误:

rails aborted!
ActiveRecord::ConnectionNotEstablished: connection to server on socket "/tmp/.s.PGSQL.5432" failed: fe_sendauth: no password supplied

Caused by:
PG::ConnectionBad: connection to server on socket "/tmp/.s.PGSQL.5432" failed: fe_sendauth: no password supplied

Tasks: TOP => db:migrate
(See full trace by running task with --trace)

尝试更新PostgreSQL至最新版本、完全卸载重装后问题依旧,系统持续要求输入从未设置过的密码。

补充说明:该问题不仅影响新建项目,此前正常运行的旧Rails项目也出现相同错误,同时无法访问localhost:3000。试过StackOverflow社区推荐的各类命令(更新、重置、删除重装Postgres等)均未解决。

解决方案

1. 检查并修正database.yml配置

Rails通过config/database.yml连接PostgreSQL,确认配置与Postgres认证规则匹配:
打开项目根目录下的config/database.yml,确保各环境配置块包含正确的用户名和密码:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: your_postgres_username # 通常为系统用户名或postgres
  password: your_postgres_password # 无密码则留空,需与Postgres认证规则对应
  host: localhost
  port: 5432

development:
  <<: *default
  database: your_app_development

2. 修改PostgreSQL的pg_hba.conf认证规则

Postgres的pg_hba.conf控制访问认证方式,是核心问题点:

  • 定位文件路径:
    • macOS(Homebrew安装):/usr/local/var/postgres/pg_hba.conf(Intel芯片)或/opt/homebrew/var/postgres/pg_hba.conf(M1/M2芯片)
    • Linux:/etc/postgresql/<版本号>/main/pg_hba.conf
  • 打开文件,找到本地Socket连接的配置行:
    local   all             all                                     scram-sha-256
    
    将认证方式改为trust(允许本地无密码登录):
    local   all             all                                     trust
    
  • 重启PostgreSQL服务:
    • macOS(Homebrew):brew services restart postgresql
    • Linux:sudo systemctl restart postgresql

3. 为Postgres用户设置密码(可选)

若需密码认证而非无密码登录,执行以下步骤:

  • 进入Postgres命令行:psql -U postgres
  • 设置密码:ALTER USER postgres WITH PASSWORD 'your_new_password';
  • 退出命令行:\q
  • 将pg_hba.conf的认证方式改回scram-sha-256或md5,同时更新database.yml的password字段为新密码,最后重启Postgres服务。

4. 验证Postgres独立连接

先排除Rails问题,单独测试Postgres连接:
执行psql -U your_postgres_username -d your_app_development,若能正常进入数据库命令行,说明Postgres本身无问题,需重新检查Rails配置;若仍提示密码错误,重复步骤2或3调整认证规则。

5. 重置项目数据库(可选)

完成以上步骤后仍有问题,可尝试重置数据库:

rails db:drop
rails db:create
rails db:migrate

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:27:06