214 votes

Rails.env vs RAILS_ENV

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 ?

363voto

Mark Rushakoff Points 97350

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 .

30voto

superluminary Points 5496

ENV['RAILS_ENV'] est désormais obsolète. Vous devriez utiliser Rails.env qui est clairement beaucoup plus agréable.

29voto

Simone Carletti Points 77653

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.

2voto

Noobinator Points 117

Mise à jour : dans Rails 3.0.9 : méthode env définie dans railties/lib/rails.rb

2voto

JuYo Points 11

Comportement étrange lors du débogage de mon application : require "active_support/notifications" (rdb:1) p ENV['RAILS_ENV'] "test (rdb:1) p Rails.env "development" (rdb:1)

Je dirais que vous devriez vous en tenir à l'un ou l'autre (et de préférence à Rails.env)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X