Odpowiedzi:
Według dokumentów , #Rails.envotacza 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.envjest to z pewnością bardziej atrakcyjna wizualnie opcja ze względu na użycie StringInquirer.
Rails.envjest to nowy standard, ponieważ RAILS_ENVjest przestarzały.
ENV['RAILS_ENV']jest teraz przestarzała .
Powinieneś używać tego, Rails.envco jest wyraźnie o wiele ładniejsze.
Przed Railsami 2.x preferowanym sposobem na uzyskanie bieżącego środowiska było użycie RAILS_ENVstałej. Podobnie możesz użyć, RAILS_DEFAULT_LOGGERaby uzyskać bieżący program rejestrujący lub RAILS_ROOTuzyskać ścieżkę do folderu głównego.
Począwszy od Rails 2.x, Rails wprowadził Railsmoduł za pomocą specjalnych metod:
To nie jest tylko zmiana kosmetyczna. Moduł Rails oferuje funkcje niedostępne przy użyciu standardowych stałych, takich jak StringInquirerwsparcie. Istnieją również niewielkie różnice. Rails.rootnie zwraca prostej Stringbuth Pathinstancji.
W każdym razie preferowanym sposobem jest użycie Railsmodułu. Stałe są nieaktualne w Rails 3 i zostaną usunięte w przyszłym wydaniu, być może Rails 3.1.
Rails.envdziała bez problemu.
Aktualizacja: w Rails 3.0.9: metoda env zdefiniowana w pliku railties / lib / rails.rb