Ich sehe beides in Beispielen, wenn ich überprüfe, in welcher Umgebung eine ausgeführt wird. Was wird bevorzugt? Sind sie in jeder Hinsicht gleich?
quelle
Ich sehe beides in Beispielen, wenn ich überprüfe, in welcher Umgebung eine ausgeführt wird. Was wird bevorzugt? Sind sie in jeder Hinsicht gleich?
Laut den Dokumenten , #Rails.env
Wraps 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.env
aufgrund der Verwendung sicherlich die optisch attraktivere Option ist StringInquirer
.
Rails.env
der neue StandardRAILS_ENV
ist, da er veraltet ist.ENV['RAILS_ENV']
ist jetzt veraltet .Sie sollten verwenden,
Rails.env
was eindeutig viel schöner ist.quelle
Vor Rails 2.x war die Verwendung der
RAILS_ENV
Konstante der bevorzugte Weg, um die aktuelle Umgebung abzurufen. Ebenso können SieRAILS_DEFAULT_LOGGER
den aktuellen Logger oderRAILS_ROOT
den Pfad zum Stammordner abrufen.Ausgehend von Rails 2.x führte Rails das
Rails
Modul 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.
StringInquirer
Unterstützung. Es gibt auch einige geringfügige Unterschiede.Rails.root
gibt kein einfachesString
buth einePath
Instanz zurück.Der bevorzugte Weg ist jedoch die Verwendung des
Rails
Moduls. Konstanten sind in Rails 3 veraltet und werden in einer zukünftigen Version, möglicherweise Rails 3.1, entfernt.quelle
Rails.env
funktioniert ohne Probleme.Seltsames Verhalten beim Debuggen meiner App: "active_support / notifications" (rdb: 1) erforderlich p ENV ['RAILS_ENV'] "test" (rdb: 1) p Rails.env "development"
Ich würde sagen, dass Sie sich an die eine oder andere halten sollten (und vorzugsweise an Rails.env)
quelle
Update: in Rails 3.0.9: env-Methode definiert in railties / lib / rails.rb
quelle