我的development.yml
文件有以下开发部分:
development:
adapter: postgresql
host: localhost
database: testtb
username: app_user
password: ENV['APP_USER_POSTGRES_PASSWORD'] <= Troublesome line
当我通过bundle exec rails console
打开一个rails控制台并输入ENV['APP_USER_POSTGRES_PASSWORD']
时,我得到了我在本地配置文件中指定的数据库密码。但是,当我启动rails服务器时,它无法连接到DB,失败
PGError FATAL: password authentication failed for user "app_user"
以前,当我实际以纯文本形式输入数据库密码,而不是尝试通过ENV['...']
访问它时,这种方法是有效的,但是由于显而易见的原因,我希望在提交对database.yml
文件的其他不安全更改的同时,将实际密码完全排除在此文件之外(因此排除在代码存储库之外)。
是不是我遗漏了的语法有什么特殊之处,或者在加载database.yml
文件时环境变量由于某种原因不可用?
发布于 2011-12-31 13:22:39
更新:有些人在评论中报告说,这个doesn't work是从Rails 4.2.x.x开始的。我自己还没试过,所以YMMV。
啊,终于找到了一个简单的解决方案--它接受嵌入式Ruby:
password: <%= ENV['APP_USER_POSTGRES_PASSWORD'] %>
发布于 2016-05-30 12:50:20
简短快速的解决方案如果您运行的是Rails版本4.2以上的版本,请运行以下命令:
spring stop
..then运行rails console
或其他rails命令。我的问题是需要重新启动Spring服务器,以便刷新/获取我的新ENV变量。我正在启动Rails控制台,直到我关闭Spring,它才能看到它们。
以前的Rails版本没有这个问题,因为它们没有使用Spring服务器。
另一个帮助您排除故障的工具--使用以下命令打印出您的database.yml配置。您可以从命令行运行它,但我更喜欢在Rails控制台中运行它,因为您可以使用awesome_print使其更美观:
在rails console
中
puts ActiveRecord::Base.configurations
使用awesome_print的...or
ap ActiveRecord::Base.configurations
或者改为从命令行执行:
bin/rails runner 'puts ActiveRecord::Base.configurations'
https://stackoverflow.com/questions/8686215
复制相似问题