2015-03-26 9 views
7

To zachowanie bardzo mnie myli. Wygląda na to, że zawartość mojej ENV lub moja konfiguracja jest gdzieś zbuforowana. Oto jak go odtworzyć:Zmienne środowiskowe są buforowane w konfiguracji Rails?

w świeżej aplikacji (używam Ruby 2.0.0 i Rails 4.2.1), edytować 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 

Element konfiguracji env_foo jest teraz 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 

ustalić pewne zmienne środowiskowe i zobaczyć, co się dzieje:

$ 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" 

Tak więc element pamięci podręcznej nadal jest nil, ale zmieniono ENV. Nawet jeśli zmienię środowisko do produkcji:

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

Gdzie jest ta konfiguracja pamięci podręcznej i Jak zrobić to odzwierciedlać nową ENV?

Uwaga: Wiem, że istnieją inne sposoby konfigurowania Railsów, ale używam Heroku, więc myślę, że korzystanie ze środowiska do konfiguracji jest zalecane.

Odpowiedz

14

Spring gem jest wstępne ładowanie aplikacji domyślnie w środowisku programowania w Rails 4.

aby przeładować aplikację, po prostu zabić procesy sprężynowe dla bieżącego projektu:

spring stop 

sprężyna nie wydaje się być w stanie odświeżyć zmiany środowiska, ale monitoruje pliki. Jeśli używasz pliku .env z dotenv na przykład, można dodać go do config/spring.rb:

Spring.watch '.env' 
+0

odpowiadając na własne pytanie w tej samej chwili co pytanie? : D – lutfianasari

+0

@lutfianasari Tak :) Wiem, że to wygląda zabawnie, ale tak naprawdę jest zachęcane. https://stackoverflow.com/help/self-answer –

+0

ah, widzę ... Widziałem, że inni również odpowiadają na własne pytanie, ale w powyższej odpowiedzi powiedziałeś "ty" i to sprawiło, że pytałem: D przepraszam za moje bezużyteczne komentarz i podziękowania za link informacyjny :) – lutfianasari