2011-12-31 43 views
61

我有我的development.yml文件的以下发展论坛部分:未能内`database.yml`文件访问环境变量

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

当我通过bundle exec rails console打开轨道控制台,然后输入ENV['APP_USER_POSTGRES_PASSWORD']我找回密码数据库我已经在我的本地个人资料中指定。然而,当我开始我的Rails服务器,它不能连接到数据库,与

PGError FATAL: password authentication failed for user "app_user" 

当我有DB密码居然以纯文本输入的,而不是试图访问它这是以前没有工作通过ENV['...'],但由于显而易见的原因,我想保留实际的密码完全(并因此在代码存储库之外),而仍然能够对database.yml文件进行其他非安全更改。

有没有什么特别的,我缺少语法,或者是一些不可用时,在加载database.yml文件的原因的环境变量?

+0

你可能要检查关于配置的本指南和局部变量: http://railsapps.github.io/rails-environment-variables.html tl; dnr:figaro gem可能对此有用。 – Antzi 2013-05-02 12:12:35

+0

@Antzi根据Figaro的README,请注意Figaro不支持database.yml,因为它在figaro config之前读取。 – mahemoff 2013-12-04 13:11:16

+0

更新:Figaro现在适用于所有Rails版本的database.yml。 https://开头github上。com/laserlemon/figaro/pull/100 – mahemoff 2014-04-01 21:54:20

回答

162

更新:有些人在评论中报告说这不适用于Rails 4.2.x.x.我没有尝试过,所以YMMV。


啊,终于想通了简单的解决方案 - 它接受嵌入的Ruby:

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

很棒!绝对有效。谢谢你,费加罗应该更新他们的文档。 – rcd 2014-01-05 22:09:40

+5

耶稣基督,你不知道我花了多少时间在这个检查上,并仔细检查我的密码。谢谢!我想我应该记住,YAML不是标记语言,但erb是。 – 2014-02-14 02:58:43

+1

@ MikeH-R - 当我终于明白这一点时,我几乎感觉到了这一点。 – jefflunt 2014-06-25 13:57:20

16
如果您运行的是较新的Rails版本

短期和快速的解决方案!运行以下命令:

spring stop 

..then运行rails console或其他轨道命令。我的问题是,需要重新启动Spring服务器才能刷新/拾取我的新ENV变量。我正在启动Rails控制台,直到关闭Spring才能看到它们。

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

帮助您排除故障的另一个工具 - 使用以下命令打印出您的database.yml配置文件。你可以在命令行中运行它,但我更喜欢内Rails的控制台运行此从那以后你就可以使用awesome_print让它非常:

rails console

puts ActiveRecord::Base.configurations 

...或使用awesome_print

ap ActiveRecord::Base.configurations 

或者代替命令行:

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

我不知道为什么有人会低估这个答案。这是完全有效的(也适用于我)+1 – Kroltan 2016-07-05 13:46:13

+0

谢谢@Kroltan,这是非常烦人的,人们有时候会低估一个有价值的问题,实际上帮助他人,然后不提供任何理由。仇敌会恨我猜。但我很高兴这有助于你。 – FireDragon 2016-07-05 21:16:06

+2

我在使用rails console和rails runner时遇到了问题,这都是因为这次弹簧重置,以便获取新的env变量!谢谢 ;) – VAShhh 2017-01-30 15:49:27