Rails.env по сравнению с RAILS_ENV

Я вижу обоих в примерах при проверке того, в каком ENV каждый работает. Что предпочтено? Они, во всех отношениях, равняются?

211
задан brad 26 April 2010 в 05:18
поделиться

2 ответа

Согласно документам , # Rails.env обертывает RAILS_ENV :

    # File vendor/rails/railties/lib/initializer.rb, line 55
     def env
       @_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
     end

Но, посмотрите, в частности, , как он обернут, используя ActiveSupport :: StringInquirer :

Обертывание строки в этом классе дает более красивый способ проверки на {{1 }} равенство. Значение, возвращаемое Rails.env, заключено в объект StringInquirer, поэтому вместо вызова этого:

 Rails.env == "production" 
 

вы можете назвать это:

 Rails.env.production? 
 

Таким образом, они не точно эквиваленты, но довольно близки. Я еще не очень много использовал Rails, но я бы сказал, что # Rails.env , безусловно, является более визуально привлекательным вариантом из-за использования StringInquirer .

360
ответ дан 23 November 2019 в 04:32
поделиться

До Rails 2.x предпочтительным способом получения текущей среды было использование константы RAILS_ENV . Точно так же вы можете использовать RAILS_DEFAULT_LOGGER , чтобы получить текущий регистратор, или RAILS_ROOT , чтобы получить путь к корневой папке.

Начиная с Rails 2.x, Rails представил модуль Rails с некоторыми специальными методами:

  • Rails.root
  • Rails.env
  • Rails.logger

Это не t просто косметическое изменение. Модуль Rails предлагает возможности, недоступные при использовании стандартных констант, таких как поддержка StringInquirer . Есть также некоторые небольшие отличия. Rails.root не возвращает простую String , но возвращает экземпляр Path .

В любом случае, предпочтительнее использовать модуль Rails . Константы устарели в Rails 3 и будут удалены в будущем выпуске, возможно, в Rails 3.1.

29
ответ дан 23 November 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: