Vedo entrambi negli esempi quando controllo in quale ambiente si sta eseguendo. Qual è la scelta preferita? Sono uguali a tutti gli effetti?
Vedo entrambi negli esempi quando controllo in quale ambiente si sta eseguendo. Qual è la scelta preferita? Sono uguali a tutti gli effetti?
Risposte:
Secondo i documenti , #Rails.env
avvolge RAILS_ENV
:
# File vendor/rails/railties/lib/initializer.rb, line 55
def env
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end
Ma guarda nello specifico come è avvolto, usando ActiveSupport::StringInquirer
:
Avvolgere una stringa in questa classe ti offre un modo più carino per verificare l'uguaglianza. Il valore restituito da Rails.env è racchiuso in un oggetto StringInquirer, quindi invece di chiamarlo:
Rails.env == "production"
puoi chiamare questo:
Rails.env.production?
Quindi non sono esattamente equivalenti, ma sono abbastanza vicini. Non ho ancora usato Rails, ma direi che #Rails.env
è sicuramente l'opzione più visivamente attraente grazie all'utilizzo StringInquirer
.
Rails.env
è il nuovo standard in quanto RAILS_ENV
è deprecato.
ENV['RAILS_ENV']
è ora obsoleto .
Dovresti usare il Rails.env
che è chiaramente molto più bello.
Prima di Rails 2.x il modo preferito per ottenere l'ambiente corrente era usare la RAILS_ENV
costante. Allo stesso modo, è possibile utilizzare RAILS_DEFAULT_LOGGER
per ottenere il logger corrente o RAILS_ROOT
per ottenere il percorso della cartella principale.
A partire da Rails 2.x, Rails ha introdotto il Rails
modulo con alcuni metodi speciali:
Questo non è solo un cambiamento estetico. Il modulo Rails offre funzionalità non disponibili utilizzando le costanti standard come il StringInquirer
supporto. Ci sono anche alcune lievi differenze. Rails.root
non restituisce un semplice String
buth Path
un'istanza.
Ad ogni modo, il modo preferito è usare il Rails
modulo. Le costanti sono deprecate in Rails 3 e verranno rimosse in una versione futura, forse Rails 3.1.
Rails.env
funziona senza problemi.
Aggiornamento: in Rails 3.0.9: metodo env definito in railties / lib / rails.rb