无法访问`database.yml`文件中的环境variables

我有我的development.yml文件的以下开发部分:

 development: adapter: postgresql host: localhost database: testtb username: app_user password: ENV['APP_USER_POSTGRES_PASSWORD'] <= Troublesome line 

当我通过bundle exec rails console打开bundle exec rails console并inputENV['APP_USER_POSTGRES_PASSWORD']我找回了我在本地configuration文件中指定的数据库密码。 但是,当我启动我的导轨服务器时,无法连接到数据库,失败

 PGError FATAL: password authentication failed for user "app_user" 

这是以前工作,当我有数据库密码实际input纯文本,而不是尝试通过ENV['...']访问它,但由于显而易见的原因,我想保留实际密码完全从这个文件因此不在代码库中),同时仍然能够对database.yml文件进行其他非安全更改。

有没有什么特别的关于我缺less的语法 ,或者是在加载database.yml文件时出于某种原因不可用的环境variables?

更新:有些人在评论中报告,这不作为Rails 4.2.xx工作。我没有尝试过自己,所以YMMV。


啊,终于想出了简单的解决scheme – 它接受embedded式的Ruby:

 password: <%= ENV['APP_USER_POSTGRES_PASSWORD'] %> 

简短而快速的解决scheme,如果你正在运行一个新的Rails版本! 运行以下命令:

 spring stop 

然后运行rails console或其他rails命令。 我的问题是,春季服务器需要重新启动,以刷新/皮卡我的新ENV变数。 我正在启动Rails控制台,直到closuresSpring才能看到它们。

以前的Rails版本没有这个问题,因为他们没有使用Spring服务器。

另一个帮助您排除故障的工具 – 使用以下命令打印出您的database.ymlconfiguration文件。 你可以从命令行运行它,但是我更喜欢在Rails控制台中运行它,因为这样你就可以使用awesome_print来实现它:

rails console

 puts ActiveRecord::Base.configurations 

…或使用awesome_print

 ap ActiveRecord::Base.configurations 

或者从命令行取而代之:

 bin/rails runner 'puts ActiveRecord::Base.configurations'