# File vendor/rails/railties/lib/initializer.rb, line 55def 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.
ładne wyjaśnienie, dzięki! Próbuję również znaleźć, gdzie zdefiniowano RAILS_ENV? Dowolny pomysł??
Brad
70
Warto wspomnieć, że Rails.envjest to nowy standard, ponieważ RAILS_ENVjest przestarzały.
Ryan Bigg,
4
Ryan, w wierszu poleceń nie możesz używać Rails.env. więc jeśli wkrótce będzie przestarzałe, to czego użyłbyś w CLI?
pjammer
8
Korzystasz z produktu Rails.env.? zabezpiecza Cię przed literówkami zmieniającymi środowisko w następujący sposób: RAILS_ENV = "production". Zwróć uwagę na brakujący znak
Magne,
Cała ta absurdalna złożoność tylko po to, by użyć znaku zapytania?
Wyrzuć konto
31
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:
Rails.root
Rails.env
Rails.logger
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.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.źródło
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 lubRAILS_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 prostejString
buthPath
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.źródło
Rails.env
działa bez problemu.Dziwne zachowanie podczas debugowania mojej aplikacji: wymagaj „active_support / notifications” (rdb: 1) p ENV [„RAILS_ENV”] „test” (rdb: 1) p Rails.env „development”
Powiedziałbym, że powinieneś trzymać się jednego lub drugiego (a najlepiej Rails.env)
źródło
Aktualizacja: w Rails 3.0.9: metoda env zdefiniowana w pliku railties / lib / rails.rb
źródło