Réponses:
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 elle RAILS_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.
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 utiliser RAILS_DEFAULT_LOGGER
pour obtenir l'enregistreur actuel ou RAILS_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 simple String
buth une Path
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.
Rails.env
fonctionne sans problème.
Mise à jour: dans Rails 3.0.9: méthode env définie dans railties / lib / rails.rb