fe_sendauth:使用 Amazon RDS 时未提供密码

fe_sendauth: no password supplied encountered with Amazon RDS

我知道很多其他人遇到过这个问题,但由于我使用的是 Amazon RDS,所以我能做的 Postgres 配置有限...

这是我database.yml

的相关部分
default: &default
  host: <%= ENV["POSTGRES_HOST"] %>
  username: <%= ENV["POSTGRES_USER"] %>
  password: <%= ENV["POSTGRES_PASSWORD"] %>
  adapter: postgis
  encoding: unicode
  database: <%= ENV["POSTGRES_DB"] %>
  port: 5432
  pool: 5

当我对主机进行硬编码时,保留所有其他内容并加载 localhost:3000,我收到 fe_sendauth: no password supplied 错误。但是,当我对所有值进行硬编码而不是使用 ENV 变量时,一切都正常加载,没有错误。

我正在使用 Amazon RDS,所以我无法编辑 pg_hba.conf,但这只是 RoR 无法访问 ENV 变量的更简单的问题吗?

是的,很明显您的 ENV 值正在返回 nil。请记住,环境变量在生产服务器上的加载方式与本地主机略有不同。在大多数部署配置中,您不能简单地设置 Unix 环境变量并使其在 ENV.

中可检测到

关于如何从您提供的代码中设置您的 ENV 变量,我真的不能说太多,但是您应该考虑使用 Figaro (https://github.com/laserlemon/figaro) or dotenv (https://github.com/bkeepers/dotenv) 来为您管理您的 ENV 变量。但是,这将需要额外的步骤,即必须在源代码管理之外管理环境变量文件。