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.envavvolge 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.envche è chiaramente molto più bello.
Prima di Rails 2.x il modo preferito per ottenere l'ambiente corrente era usare la RAILS_ENVcostante. Allo stesso modo, è possibile utilizzare RAILS_DEFAULT_LOGGERper ottenere il logger corrente o RAILS_ROOTper ottenere il percorso della cartella principale.
A partire da Rails 2.x, Rails ha introdotto il Railsmodulo con alcuni metodi speciali:
Questo non è solo un cambiamento estetico. Il modulo Rails offre funzionalità non disponibili utilizzando le costanti standard come il StringInquirersupporto. Ci sono anche alcune lievi differenze. Rails.rootnon restituisce un semplice Stringbuth Pathun'istanza.
Ad ogni modo, il modo preferito è usare il Railsmodulo. Le costanti sono deprecate in Rails 3 e verranno rimosse in una versione futura, forse Rails 3.1.
Rails.envfunziona senza problemi.
Aggiornamento: in Rails 3.0.9: metodo env definito in railties / lib / rails.rb