我知道很多其他人都遇到过这个问题,但我在Postgres配置中受限制,因为我使用的是亚马逊RDS ...
以下是 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变量吗?
答案 0 :(得分:3)
是的,很明显你的ENV值正在返回零。请记住,生产服务器上的环境变量的加载方式与localhost不同。在大多数部署配置中,您不能简单地设置Unix环境变量,并且可以在ENV
中检测到它。
我无法详细说明如何根据您提供的代码设置ENV
变量,但您应该考虑使用Figaro(https://github.com/laserlemon/figaro)或dotenv(https://github.com/bkeepers/dotenv)来为您管理您的ENV变量。但是,它需要额外的步骤来管理源代码控制之外的环境变量文件。