Odpowiedzi:
Według dokumentów , #Rails.env
otacza RAILS_ENV
:
# File vendor/rails/railties/lib/initializer.rb, line 55
def env
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end
Ale spójrz dokładnie na to, jak jest owinięty, używając ActiveSupport::StringInquirer
:
Zawijanie łańcucha w tej klasie daje ładniejszy sposób na sprawdzenie równości. Wartość zwrócona przez Rails.env jest zawinięta w obiekt StringInquirer, więc zamiast wywoływać to:
Rails.env == "production"
możesz to nazwać:
Rails.env.production?
Więc nie są dokładnie równoważne, ale są dość blisko. Jeszcze nie korzystałem z Railsów, ale powiedziałbym, że #Rails.env
jest to z pewnością bardziej atrakcyjna wizualnie opcja ze względu na użycie StringInquirer
.
Rails.env
jest to nowy standard, ponieważ RAILS_ENV
jest przestarzały.
ENV['RAILS_ENV']
jest teraz przestarzała .
Powinieneś używać tego, Rails.env
co jest wyraźnie o wiele ładniejsze.
Przed Railsami 2.x preferowanym sposobem na uzyskanie bieżącego środowiska było użycie RAILS_ENV
stałej. Podobnie możesz użyć, RAILS_DEFAULT_LOGGER
aby uzyskać bieżący program rejestrujący lub RAILS_ROOT
uzyskać ścieżkę do folderu głównego.
Począwszy od Rails 2.x, Rails wprowadził Rails
moduł za pomocą specjalnych metod:
To nie jest tylko zmiana kosmetyczna. Moduł Rails oferuje funkcje niedostępne przy użyciu standardowych stałych, takich jak StringInquirer
wsparcie. Istnieją również niewielkie różnice. Rails.root
nie zwraca prostej String
buth Path
instancji.
W każdym razie preferowanym sposobem jest użycie Rails
modułu. Stałe są nieaktualne w Rails 3 i zostaną usunięte w przyszłym wydaniu, być może Rails 3.1.
Rails.env
działa bez problemu.
Aktualizacja: w Rails 3.0.9: metoda env zdefiniowana w pliku railties / lib / rails.rb