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

Rails中PostgreSQL密码存入ENV变量后出现PG::ConnectionBad fe_sendauth: no password supplied错误的排查求助

解决Rails连接PostgreSQL时"fe_sendauth: no password supplied"的问题

嘿,我一眼就看出问题出在哪了——你的pg_keys.yml文件里的环境变量根本没被Rails加载进来!所以database.yml里写的<%= ENV['PG_PASSWORD'] %>其实是空值,PostgreSQL自然就会提示你未提供密码了。

下面给你两种靠谱的解决办法,选哪种都能搞定:

方法一:手动让Rails加载你的YAML文件

  1. 进入项目的config/initializers文件夹,新建一个叫load_pg_env.rb的文件(名字只要易懂就行)
  2. 把这段代码粘贴进去,它会帮你把pg_keys.yml里的内容读取到环境变量中:
require 'yaml'

# 读取pg_keys.yml文件,注意路径要和你的文件实际位置对应
pg_config = YAML.load_file(Rails.root.join('pg_keys.yml'))
pg_config.each do |key, value|
  ENV[key] = value unless ENV[key].present?
end

划重点!一定要把pg_keys.yml加到.gitignore里,绝对别把密码不小心提交到代码仓库了!

  1. 重启你的Rails服务器,再尝试连接数据库,应该就能正常运行了。

方法二:用dotenv gem管理环境变量(更推荐)

如果以后还要添加其他环境变量,用dotenv会更省心规范:

  1. 打开Gemfile,添加这一行代码:
gem 'dotenv-rails', groups: [:development, :test]
  1. 执行bundle install安装这个gem
  2. 在项目根目录新建一个.env文件,把密码写入其中:
PG_PASSWORD=***********
  1. 同样要把.env加到.gitignore里,保护好敏感信息
  2. 重启服务器后,database.yml就能正常读取到ENV['PG_PASSWORD']了

最后提个醒

生产环境里绝对不要用文件存储密码!建议使用服务器提供的环境变量配置功能(比如云服务商控制台里的环境变量设置),这样安全性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:07:47