2015-03-26 6 views
7

Dieses Verhalten verwirrt mich wirklich. Es scheint, als wäre der Inhalt meiner ENV oder meine Konfiguration irgendwo zwischengespeichert. Hier ist, wie es zu reproduzieren:Umgebungsvariablen zwischengespeichert in Rails config?

In einer frischen app (Ich bin mit Ruby 2.0.0 und Rails 4.2.1), bearbeiten application.rb:

$ cat config/application.rb 
require File.expand_path('../boot', __FILE__) 

require 'rails/all' 

Bundler.require(*Rails.groups) 

module Myapp 
    class Application < Rails::Application 
    config.active_record.raise_in_transactional_callbacks = true 

    config.env_foo = ENV['FOO'] 
    end 
end 

Das Konfigurationselement env_foo ist jetzt nil:

$ unset FOO # make sure FOO is unset 
$ rails console 
Loading development environment (Rails 4.2.1) 
2.0.0-p598 :001 > Rails.application.config.env_foo 
=> nil 

Set einige Umgebungsvariablen und sehen, was passiert:

$ export FOO=barbapapa 
$ rails console 
Loading development environment (Rails 4.2.1) 
2.0.0-p598 :001 > Rails.application.config.env_foo 
=> nil 
2.0.0-p598 :002 > ENV['FOO'] 
=> "barbapapa" 

Also der Cache-Artikel ist immer noch nil aber ENV hat sich geändert. Auch wenn ich Umgebung Produktion ändern:

$ RAILS_ENV=production rails console 
Loading production environment (Rails 4.2.1) 
2.0.0-p598 :001 > Rails.application.config.env_foo 
=> nil 

Wo ist diese Konfiguration gecached und wie kann ich es machen den neuen ENV reflektieren?

Hinweis: Ich weiß, dass es andere Möglichkeiten gibt, Rails zu konfigurieren, aber ich verwende Heroku, daher denke ich, dass die Verwendung der Umgebung für die Konfiguration empfohlen wird.

Antwort

14

Das Spring Juwel ist Apps Standard in der Entwicklungsumgebung in Rails Vorbelastung 4.

App neu zu laden, einfach die Feder Prozesse für das aktuelle Projekt töten:

spring stop 

Frühling nicht scheinen bei Änderungen der Umgebung aktualisiert zu werden, aber es überwacht Dateien. Wenn Sie eine .env-Datei verwenden, mit dotenv zum Beispiel, können Sie es zu config/spring.rb hinzufügen:

Spring.watch '.env' 
+0

Ihre eigene Frage in der gleichen Minute wie die Frage zu beantworten? : D – lutfianasari

+0

@lutfianasari Ja :) Ich weiß, es sieht lustig aus, aber es ist tatsächlich ermutigt. https://stackoverflow.com/help/self-answer –

+0

ah, ich sehe .. Ich sah andere auch ihre eigene Frage beantworten, aber Sie sagten "Sie" in der obigen Antwort und das brachte mich in Frage: D Entschuldigung für meine nutzlos Kommentar und danke für den Informationslink :) – lutfianasari

Verwandte Themen