Je vois les deux dans des exemples lorsque je vérifie dans quel env. on fonctionne. Quelle est la préférence ? Sont-ils, à toutes fins utiles, égaux ?
Réponses
Trop de publicités?Selon les docs , #Rails.env
enveloppes 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 de caractères dans cette classe donne une façon plus jolie de tester l'égalité l'égalité. La valeur renvoyée par Rails.env est enveloppée dans une classe StringInquirer, donc au lieu de d'appeler ceci :
Rails.env == "production"
vous pouvez appeler ça :
Rails.env.production?
Donc ils ne sont pas exactement équivalent, mais ils sont assez proches. Je n'ai pas encore beaucoup utilisé Rails, mais je dirais que #Rails.env
est certainement l'option la plus attrayante d'un point de vue visuel, grâce à l'utilisation d'un système de gestion de la qualité. StringInquirer
.
Avant Rails 2.x, le moyen privilégié pour obtenir l'environnement actuel était d'utiliser la fonction RAILS_ENV
constante. De même, vous pouvez utiliser RAILS_DEFAULT_LOGGER
pour obtenir le logger actuel ou RAILS_ROOT
pour obtenir le chemin vers le dossier racine.
À partir de Rails 2.x, Rails a introduit la fonction Rails
avec quelques méthodes spéciales :
- Rails.Root
- Rails.env
- Rails.logger
Ce n'est pas seulement un changement cosmétique. Le module Rails offre des possibilités qui ne sont pas disponibles en utilisant les constantes standard telles que StringInquirer
soutien. Il existe également quelques légères différences. Rails.root
ne renvoie pas un simple String
maish a Path
instance.
Quoi qu'il en soit, la méthode préférée consiste à utiliser le Rails
module. Les constantes sont dépréciées dans Rails 3 et seront supprimées dans une prochaine version, peut-être Rails 3.1.