Respuestas:
Según los documentos , se #Rails.env
envuelve RAILS_ENV
:
# File vendor/rails/railties/lib/initializer.rb, line 55
def env
@_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
end
Pero, mire específicamente cómo está envuelto, usando ActiveSupport::StringInquirer
:
Ajustar una cadena en esta clase le brinda una forma más bonita de probar la igualdad. El valor devuelto por Rails.env está envuelto en un objeto StringInquirer, por lo que en lugar de llamar a esto:
Rails.env == "production"
puedes llamar a esto:
Rails.env.production?
Por lo tanto, no son exactamente equivalentes, pero están bastante cerca. Todavía no he usado mucho Rails, pero diría que #Rails.env
es sin duda la opción más atractiva visualmente debido al uso StringInquirer
.
Rails.env
es el nuevo estándar, ya que RAILS_ENV
está en desuso.
ENV['RAILS_ENV']
ahora está en desuso .
Deberías usar el Rails.env
que claramente es mucho mejor.
Antes de Rails 2.x, la forma preferida de obtener el entorno actual era usar la RAILS_ENV
constante. Del mismo modo, puede usar RAILS_DEFAULT_LOGGER
para obtener el registrador actual o RAILS_ROOT
para obtener la ruta a la carpeta raíz.
A partir de Rails 2.x, Rails introdujo el Rails
módulo con algunos métodos especiales:
Esto no es solo un cambio cosmético. El módulo Rails ofrece capacidades que no están disponibles utilizando las constantes estándar, como el StringInquirer
soporte. También hay algunas pequeñas diferencias. Rails.root
no devuelve un simple String
pero unPath
instancia.
De todos modos, la forma preferida es usar el Rails
módulo. Las constantes están en desuso en Rails 3 y se eliminarán en una versión futura, tal vez Rails 3.1.
Rails.env
Funciona sin problemas.
Actualización: en Rails 3.0.9: método env definido en railties / lib / rails.rb