Rails.env против RAILS_ENV - PullRequest
       13

Rails.env против RAILS_ENV

207 голосов
/ 26 апреля 2010

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

Ответы [ 5 ]

355 голосов
/ 26 апреля 2010

Согласно документации , #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.

28 голосов
/ 04 января 2012

ENV['RAILS_ENV'] сейчас устарело .

Вы должны использовать Rails.env, что намного лучше.

28 голосов
/ 26 апреля 2010

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

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

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

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

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

2 голосов
/ 29 июля 2011

Обновление: в Rails 3.0.9: метод env определен в railties / lib / rails.rb

2 голосов
/ 01 февраля 2011

Странное поведение при отладке моего приложения: требуется "active_support / notifications" (rdb: 1) p ENV ['RAILS_ENV'] "test" (rdb: 1) p Rails.env "development"

Iсказал бы, что вы должны придерживаться одного или другого (и предпочтительно Rails.env)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...