8

從小煩惱開始的事情現在變成了頭痛。我正在構建一個Rails 4應用程序,並使用Foreman爲我的開發人員設置了Procfile和.env文件以進行配置。當我在.env文件中設置一個ENV變量時,它會被我的應用程序正確拾取。在這種情況下,我爲初始化器中的Paperclip設置了一些ENV選項。爲什麼我的Rails初始化程序在控制檯中緩存ENV變量(Foreman,Dev env)

當我去改變ENV變量的值時,問題出現了。在控制檯中,如果我鍵入ENV [「MY_VAR」],它將顯示新值。但是,我的初始化程序中使用的值(大概是在啓動控制檯時運行的)顯示了舊值!我的項目中沒有任何地方是任何地方列出的舊值。這導致我相信環境正在被緩存,或者env變量被導出到我的shell。我沒有足夠的空間去尋找,所以我們將不勝感激!我正在使用Ruby 1.9.3-p374和Rails 4.1.0在Mac(10.9.4)上開發。

實施例:

ROOT/.ENV

S3_BUCKET=mybucket 

配置/初始化/ paperclip.rb

Paperclip::Attachment.default_options[:s3_credentials] = {bucket: ENV["S3_BUCKET"]} 

如果更改S3_BUCKET的值設定爲 「newbucket」 和運行「工頭運行軌道c「或」軌道c「進入控制檯,這是發生了什麼情況:

ENV["S3_BUCKET"] # => "newbucket" 
Paperclip::Attachment.default_options[:s3_credentials] # => {bucket: 'mybucket'} 

我應該提到,這種行爲也發生在我放在/ lib中的類中。我想這是因爲我忽略了一些愚蠢的東西。有任何想法嗎?

+0

如果你改變你的環境變量,並希望你的應用程序來提取它們,你必須重新啓動應用程序。這一直是這種情況。 – nzifnab 2014-09-19 16:57:27

+0

當然可以。然而,爲了澄清,在重新啓動應用程序之後,這些更改不會在初始化程序中找到,但它們會在ENV哈希中拾取。 – Spencer 2014-09-19 17:23:11

+0

你是否在使用'spring'? (檢查你的Gemfile。) – fny 2014-09-19 18:07:08

回答

24

如果您使用Rails的4開箱即用,它帶有一個名爲Spring的寶石,是打算通過在後臺預加載應用程序的一個實例,並重新加載它作爲你的代碼和配置,使您的生活更輕鬆文件改變。

但是,Spring只監視Rails的默認配置文件,因此您需要配置Spring來監視其他任何您希望觸發重新加載的文件。

對於自定義設置,彈簧讀數爲~/.spring.rbconfig/spring.rb。您可以添加以下行添加到您選擇的文件看你.env文件更改:

Spring.watch '.env' 

Spring's configuration documentation在README以獲得更多信息。

+0

輝煌,謝謝!看起來我應該更仔細地閱讀升級說明:-)。 – Spencer 2014-09-19 18:22:13

+4

OMFG ...我想知道爲什麼重新啓動控制檯不會接受更改,即使我刪除了flipp'n文件!我不得不完全關閉終端。謝謝你的這個!絕對令人發狂。 – manafire 2014-10-16 02:36:11

+1

從我所知道的情況來看,即使使用此修補程序,config/initializers也不會重新加載。看到這裏:https://github.com/rails/spring/issues/378 – stevo 2015-02-04 23:55:02

相關問題