无法访问`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'