Ferrocarril.env vs RAILS ENV


Veo ambos en ejemplos cuando compruebo en qué se está ejecutando env one. ¿Cuál es el preferido? ¿Son iguales a todos los efectos?

Author: brad, 2010-04-26

5 answers

Según los documentos, #Rails.env wraps RAILS_ENV:

    # File vendor/rails/railties/lib/initializer.rb, line 55
     def env
       @_env ||= ActiveSupport::StringInquirer.new(RAILS_ENV)
     end

Pero, mira específicamente cómo está envuelto, usando ActiveSupport::StringInquirer:

Envolver una cadena en esta clase da usted una manera más bonita de probar para igualdad. El valor devuelto por Ferrocarril.env está envuelto en un StringInquirer objeto así que en lugar de llamando a esto:

Rails.env == "production"

Puedes llamar a esto:

Rails.env.production?

Así que 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 de StringInquirer.

 342
Author: Mark Rushakoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-06 21:40:58

Antes de Rails 2.x la forma preferida de obtener el entorno actual era usando la constante RAILS_ENV. 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 módulo Rails con algunos métodos especiales:

  • Rails.raíz
  • Rails.env
  • Rails.logger

Esto no es solo un cambio cosmético. El módulo Rails ofrece capacidades que no están disponibles constantes estándar como StringInquirer soporte. También hay algunas ligeras diferencias. Rails.root no devuelve una instancia simple String buth a Path.

De todos modos, la forma preferida es usar el módulo Rails. Las constantes están obsoletas en Rails 3 y se eliminarán en una versión futura, tal vez Rails 3.1.

 28
Author: Simone Carletti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-26 19:08:18

ENV['RAILS_ENV'] ahora está en desuso.

Debes usar Rails.env que es claramente mucho más agradable.

 22
Author: superluminary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-31 14:19:11

Actualización: en Rails 3.0.9: método env definido en railties / lib / rails.rb

 2
Author: jgpawletko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-29 19:30:36

Comportamiento extraño al depurar mi aplicación: requerir " active_support / notifications" (rdb: 1) p ENV ["RAILS_ENV"] "prueba" (rdb: 1) p Rails.env "desarrollo"

Yo diría que usted debe atenerse a uno u otro (y preferiblemente Rails.env)

 1
Author: JuYo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-01 16:54:55