從小煩惱開始的事情現在變成了頭痛。我正在構建一個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中的類中。我想這是因爲我忽略了一些愚蠢的東西。有任何想法嗎?
如果你改變你的環境變量,並希望你的應用程序來提取它們,你必須重新啓動應用程序。這一直是這種情況。 – nzifnab 2014-09-19 16:57:27
當然可以。然而,爲了澄清,在重新啓動應用程序之後,這些更改不會在初始化程序中找到,但它們會在ENV哈希中拾取。 – Spencer 2014-09-19 17:23:11
你是否在使用'spring'? (檢查你的Gemfile。) – fny 2014-09-19 18:07:08