# File vendor/rails/railties/lib/initializer.rb, line 55def env
@_env||=ActiveSupport::StringInquirer.new(RAILS_ENV)end
Porém, observe especificamente como ele está envolvido, usando ActiveSupport::StringInquirer:
O agrupamento de uma sequência nesta classe fornece uma maneira mais bonita de testar a igualdade. O valor retornado pelo Rails.env é agrupado em um objeto StringInquirer, portanto, em vez de chamar isso:
Rails.env =="production"
você pode chamar isso:
Rails.env.production?
Portanto, eles não são exatamente equivalentes, mas são bastante próximos. Ainda não usei muito o Rails, mas eu diria que #Rails.envé certamente a opção mais atraente visualmente devido ao uso StringInquirer.
boa explicação, thx! Também estou tentando encontrar onde RAILS_ENV está definido? Qualquer ideia??
26710 brad
70
Vale ressaltar que esse Rails.envé o novo padrão que RAILS_ENVestá sendo descontinuado.
Ryan Bigg
4
Ryan, em uma linha de comando, você não pode usar o Rails.env. então, se for preterido em breve, o que você usaria na CLI?
pjammer
8
Usando Rails.env.production? protege você contra erros de digitação que realmente alteram o ambiente como este: RAILS_ENV = "produção". Observe o sinal de falta =.
Magne
Toda essa complexidade ridícula só para você poder usar um ponto de interrogação?
Jogue fora a conta
31
ENV['RAILS_ENV']agora está obsoleto .
Você deve usar o Rails.envque é claramente muito melhor.
Antes do Rails 2.x, a maneira preferida de obter o ambiente atual era usar a RAILS_ENVconstante. Da mesma forma, você pode usar RAILS_DEFAULT_LOGGERpara obter o criador de logs atual ou RAILS_ROOTo caminho para a pasta raiz.
A partir do Rails 2.x, o Rails apresentou o Railsmódulo com alguns métodos especiais:
Rails.root
Rails.env
Rails.logger
Esta não é apenas uma mudança cosmética. O módulo Rails oferece recursos não disponíveis usando as constantes padrão, como StringInquirersuporte. Existem também algumas pequenas diferenças. Rails.rootnão retorna um Stringbuth simples por Pathinstância.
De qualquer forma, a maneira preferida é usar o Railsmódulo. As constantes foram descontinuadas no Rails 3 e serão removidas em uma versão futura, talvez o Rails 3.1.
Rails.env
é o novo padrão queRAILS_ENV
está sendo descontinuado.ENV['RAILS_ENV']
agora está obsoleto .Você deve usar o
Rails.env
que é claramente muito melhor.fonte
Antes do Rails 2.x, a maneira preferida de obter o ambiente atual era usar a
RAILS_ENV
constante. Da mesma forma, você pode usarRAILS_DEFAULT_LOGGER
para obter o criador de logs atual ouRAILS_ROOT
o caminho para a pasta raiz.A partir do Rails 2.x, o Rails apresentou o
Rails
módulo com alguns métodos especiais:Esta não é apenas uma mudança cosmética. O módulo Rails oferece recursos não disponíveis usando as constantes padrão, como
StringInquirer
suporte. Existem também algumas pequenas diferenças.Rails.root
não retorna umString
buth simples porPath
instância.De qualquer forma, a maneira preferida é usar o
Rails
módulo. As constantes foram descontinuadas no Rails 3 e serão removidas em uma versão futura, talvez o Rails 3.1.fonte
Rails.env
funciona sem problemas.Comportamento estranho ao depurar meu aplicativo: requer "suporte_ ativo / notificações" (rdb: 1) p ENV ['RAILS_ENV'] "teste" (rdb: 1) p Rails.env "development"
Eu diria que você deve seguir um ou outro (e de preferência o Rails.env)
fonte
Atualização: no Rails 3.0.9: método env definido em railties / lib / rails.rb
fonte