Исправить замену Ruby on Rails 3 для ENV ["RAILS_ENV"] || = 'production'? - PullRequest
17 голосов
/ 25 октября 2010

Мы делаем обновление до Ruby on Rails 3 (как сейчас пол мира), и я старательно заменяю использование RAILS_ENV, например

RAILS_ENV == 'wibble'
# becomes
Rails.env.wibble?

Но я некак определенно, что делать с:

ENV["RAILS_ENV"] ||= 'production'

У нас это на вершине целой связки Rake задач и демонов, и идея в том, что вы можете пройти RAILS_ENV в командной строке, но по умолчанию используется 'production', если она не передана.

Я не уверен в новом подходящем для Rails3 способе сделать это.Так что сейчас мой rails:upgrade:check сильно жалуется на это вторжение Rails2-ишнесса ...

Я не знаю, сработает ли

::Rails.env ||= 'production'

.

Существует ли Rails.env в демоне?

Автоматически ли он автоматически заполняется значением RAILS_ENV, передаваемым в командной строке, или нам нужен новый способ вызова демонов?

Какая мантра для этого подходит?


Обновление:

Изучая исходный код Rails.env,

def env
  @_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end

, мы можем вывести ряд вещей.

Во-первых, похоже, что RAILS_ENV на самом деле все еще существует - это означает, что его можно установить, и Rails.env найдет его ...

Если Rails действителен в контексте демона, то ничего болеедолжно быть сделано.Если нет - то мне было бы наплевать и использовать старый RAILS_ENV, как и раньше.

Ответы [ 3 ]

11 голосов
/ 15 ноября 2010

Rails.env на самом деле имеет тип ActiveSupport::StringInquirer, который переопределяет method_missing, чтобы обеспечить хороший синтаксис равенства.Проверьте: http://api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html

Итак, если вы хотите переопределить его как «производственный» по умолчанию, вы должны написать:

Rails.env ||= ActiveSupport::StringInquirer.new('production')

Однако вам придется проверить, какойнеинициализированное значение Rails.env, я не уверен, что это действительно nil.

Лучший способ действий, IMO, это просто добавить env RAILS_ENV=production ко всем вашим сценариям.

9 голосов
/ 10 ноября 2010

Редактировать lib/tasks/environments.rake

# Sets environments as needed for rake tasks
%w[development production staging].each do |env|
  desc "Runs the following task in the #{env} environment" 
  task env do
    Rails.env = env
  end
end

task :testing do
  Rake::Task["test"].invoke
end

task :dev do
  Rake::Task["development"].invoke
end

task :prod do
  Rake::Task["production"].invoke
end

Источник

UPDATE

передача RAILS_ENV=production через командную строку, что-то вроде этого:

RAILS_ENV=production rake db:setup

Помогает ли это помочь:

# before
if RAILS_ENV == 'production'
  ...

# Rails 3
if Rails.env.production?
2 голосов
/ 16 февраля 2011
if Rails.env.production?
  puts '...'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...