# File vendor/rails/railties/lib/initializer.rb, line 55def 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.enves sin duda la opción más atractiva visualmente debido al uso StringInquirer.
Buena explicación, gracias! También estoy tratando de encontrar dónde se define RAILS_ENV? ¿¿Alguna idea??
Brad
70
Vale la pena mencionar que Rails.enves el nuevo estándar, ya que RAILS_ENVestá en desuso.
Ryan Bigg el
44
Ryan, en una línea de comando, no puedes usar Rails.env. entonces, si se está desaprobando pronto, ¿qué usaría en la CLI?
pjammer
8
Usando Rails.env.production? lo protege contra errores tipográficos que realmente cambian el entorno de esta manera: RAILS_ENV = "producción". Observe el signo perdido =.
Magne
¿Toda esta complejidad ridícula solo para que puedas usar un signo de interrogación?
Deseche la cuenta
31
ENV['RAILS_ENV']ahora está en desuso .
Deberías usar el Rails.envque claramente es mucho mejor.
Antes de Rails 2.x, la forma preferida de obtener el entorno actual era usar la RAILS_ENVconstante. Del mismo modo, puede usar RAILS_DEFAULT_LOGGERpara obtener el registrador actual o RAILS_ROOTpara obtener la ruta a la carpeta raíz.
A partir de Rails 2.x, Rails introdujo el Railsmódulo con algunos métodos especiales:
Rails.root
Rails.env
Rails.logger
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 StringInquirersoporte. También hay algunas pequeñas diferencias. Rails.rootno devuelve un simple Stringpero unPath instancia.
De todos modos, la forma preferida es usar el Railsmó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
es el nuevo estándar, ya queRAILS_ENV
está en desuso.ENV['RAILS_ENV']
ahora está en desuso .Deberías usar el
Rails.env
que claramente es mucho mejor.fuente
Antes de Rails 2.x, la forma preferida de obtener el entorno actual era usar la
RAILS_ENV
constante. Del mismo modo, puede usarRAILS_DEFAULT_LOGGER
para obtener el registrador actual oRAILS_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 simpleString
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.fuente
Rails.env
Funciona sin problemas.Comportamiento extraño al depurar mi aplicación: requiere "active_support / notifications" (rdb: 1) p ENV ['RAILS_ENV'] "test" (rdb: 1) p Rails.env "development"
Yo diría que debes apegarte a uno u otro (y preferiblemente a Rails.env)
fuente
Actualización: en Rails 3.0.9: método env definido en railties / lib / rails.rb
fuente