Je vois les deux dans les exemples lors de la vérification de l'environnement dans lequel on s'exécute. Qu'est-ce qui est préféré? Sont-ils, à toutes fins utiles, égaux?
la source
Je vois les deux dans les exemples lors de la vérification de l'environnement dans lequel on s'exécute. Qu'est-ce qui est préféré? Sont-ils, à toutes fins utiles, égaux?
Selon les documents , #Rails.env
encapsule RAILS_ENV
:
# File vendor/rails/railties/lib/initializer.rb, line 55
def env
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end
Mais regardez spécifiquement comment il est emballé, en utilisant ActiveSupport::StringInquirer
:
Envelopper une chaîne dans cette classe vous offre un moyen plus joli de tester l'égalité. La valeur retournée par Rails.env est encapsulée dans un objet StringInquirer donc au lieu d'appeler ceci:
Rails.env == "production"
vous pouvez appeler cela:
Rails.env.production?
Ils ne sont donc pas exactement équivalents, mais ils sont assez proches. Je n'ai pas encore beaucoup utilisé Rails, mais je dirais que #Rails.env
c'est certainement l'option la plus attrayante visuellement en raison de l'utilisation StringInquirer
.
Rails.env
s'agit de la nouvelle norme, car elleRAILS_ENV
est obsolète.ENV['RAILS_ENV']
est désormais obsolète .Vous devriez utiliser
Rails.env
ce qui est clairement beaucoup plus agréable.la source
Avant Rails 2.x, la méthode préférée pour obtenir l'environnement actuel était d'utiliser la
RAILS_ENV
constante. De même, vous pouvez utiliserRAILS_DEFAULT_LOGGER
pour obtenir l'enregistreur actuel ouRAILS_ROOT
pour obtenir le chemin d'accès au dossier racine.À partir de Rails 2.x, Rails a introduit le
Rails
module avec quelques méthodes spéciales:Ce n'est pas seulement un changement cosmétique. Le module Rails offre des fonctionnalités non disponibles à l'aide des constantes standard telles que le
StringInquirer
support. Il existe également de légères différences.Rails.root
ne renvoie pas un simpleString
buth unePath
instance.Quoi qu'il en soit, la meilleure façon d'utiliser le
Rails
module. Les constantes sont obsolètes dans Rails 3 et seront supprimées dans une future version, peut-être Rails 3.1.la source
Rails.env
fonctionne sans problème.Comportement étrange lors du débogage de mon application: nécessite "active_support / notifications" (rdb: 1) p ENV ['RAILS_ENV'] "test" (rdb: 1) p Rails.env "development"
Je dirais que vous devez vous en tenir à l'un ou l'autre (et de préférence Rails.env)
la source
Mise à jour: dans Rails 3.0.9: méthode env définie dans railties / lib / rails.rb
la source