Antworten:
Laut den Dokumenten , #Rails.envWraps RAILS_ENV:
# File vendor/rails/railties/lib/initializer.rb, line 55
def env
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end
Schauen Sie sich jedoch genau an, wie es verpackt ist, indem Sie Folgendes verwenden ActiveSupport::StringInquirer:
Wenn Sie eine Zeichenfolge in diese Klasse einschließen, können Sie die Gleichheit besser testen. Der von Rails.env zurückgegebene Wert wird in ein StringInquirer-Objekt eingeschlossen, anstatt Folgendes aufzurufen:
Rails.env == "production"Sie können dies nennen:
Rails.env.production?
Sie sind also nicht genau gleichwertig, aber sie stehen sich ziemlich nahe. Ich habe Rails noch nicht viel benutzt, aber ich würde sagen, dass dies #Rails.envaufgrund der Verwendung sicherlich die optisch attraktivere Option ist StringInquirer.
Rails.envder neue Standard RAILS_ENVist, da er veraltet ist.
ENV['RAILS_ENV']ist jetzt veraltet .
Sie sollten verwenden, Rails.envwas eindeutig viel schöner ist.
Vor Rails 2.x war die Verwendung der RAILS_ENVKonstante der bevorzugte Weg, um die aktuelle Umgebung abzurufen. Ebenso können Sie RAILS_DEFAULT_LOGGERden aktuellen Logger oder RAILS_ROOTden Pfad zum Stammordner abrufen.
Ausgehend von Rails 2.x führte Rails das RailsModul mit einigen speziellen Methoden ein:
Dies ist nicht nur eine kosmetische Veränderung. Das Rails-Modul bietet Funktionen, die mit den Standardkonstanten nicht verfügbar sind, z. B. StringInquirerUnterstützung. Es gibt auch einige geringfügige Unterschiede. Rails.rootgibt kein einfaches Stringbuth eine PathInstanz zurück.
Der bevorzugte Weg ist jedoch die Verwendung des RailsModuls. Konstanten sind in Rails 3 veraltet und werden in einer zukünftigen Version, möglicherweise Rails 3.1, entfernt.
Rails.envfunktioniert ohne Probleme.
Update: in Rails 3.0.9: env-Methode definiert in railties / lib / rails.rb