Відповіді:
Відповідно до документів , #Rails.envобгортання RAILS_ENV:
# File vendor/rails/railties/lib/initializer.rb, line 55
def env
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end
Але подивіться конкретно, як це загорнуто, використовуючи ActiveSupport::StringInquirer:
Загортання рядка в цьому класі дає гарніший спосіб перевірити рівність. Значення, повернене Rails.env, загортається в об'єкт StringInquirer, тому замість виклику цього:
Rails.env == "production"Ви можете назвати це:
Rails.env.production?
Отже, вони не зовсім рівноцінні, але вони досить близькі. Я ще не дуже використовував Rails, але, скажу, #Rails.envце, безумовно, більш візуально привабливий варіант завдяки використанню StringInquirer.
Rails.envце новий стандарт, RAILS_ENVякий застарілий.
Перед Rails 2.x кращим способом отримання поточного середовища було використання RAILS_ENVконстанти. Аналогічно, ви можете використовувати RAILS_DEFAULT_LOGGERдля отримання поточного реєстратора або RAILS_ROOTотримання шляху до кореневої папки.
Починаючи з Rails 2.x, Rails представив Railsмодуль деякими спеціальними методами:
Це не просто косметична зміна. Модуль Rails пропонує можливості, недоступні за допомогою стандартних констант, таких як StringInquirerпідтримка. Також є деякі незначні відмінності. Rails.rootне повертає простий Stringбут Pathекземпляр.
У будь-якому випадку кращим способом є використання Railsмодуля. Константи застаріли в Rails 3 і будуть видалені в майбутньому випуску, можливо, Rails 3.1.
Rails.envпрацює без проблем.
Оновлення: в Rails 3.0.9: метод env, визначений у railties / lib / rails.rb