2011-12-31 35 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