¿Cómo puedo determinar si mis rieles están en el entorno de desarrollo y no en el entorno de prueba?

78

Tengo un código que debe ejecutarse solo si la aplicación rails está en el entorno de desarrollo (es decir, el servidor $ rails) pero no en el entorno de prueba (es decir, la prueba $ rake).

Cuando lo intento

if Rails.env.development?
    dont run me during testing
end

el código se ejecuta independientemente del entorno en el que me encuentre. Incluso he intentado:

if Rails.env.development? and not Rails.env.test?
    NO, REALLY, DONT RUN ME DURING TESTING
end

pero no amor.

¿Qué debería estar haciendo en su lugar?

spierepf
fuente
Este código debería funcionar. ¿Ha intentado generar Rails.envdentro de ese bloque para ver qué entorno cree que está usando Rails?
PinnyM
1
Creo que podrían ser los bits "y no" ... ¡eso no es lo mismo que &&! Eso soy yo adivinando ... ¿encontraste una solución?
baash05
Nunca encontré una solución. Por alguna razón, rails ejecuta sus inicializadores dos veces (vea el comentario a continuación). Desde entonces he abandonado los rieles.
spierepf

Respuestas:

146

Parece que lo estás llamando correctamente. Quizás el problema es que el medio ambiente recibe un nombre diferente en alguna parte. Prueba en la consola:

> Rails.env
=> "development"
> Rails.env.development?
=> true
> Rails.env.test?
=> false

... para confirmar que el medio ambiente es lo que crees que es.

Mori
fuente
1
Ok, he creado un inicializador que simplemente 'pone Rails.env'. El resultado es que $ rails server da "desarrollo", mientras que $ rake test da tanto "desarrollo" como "prueba". Esto me sugiere que rails está ejecutando mi inicializador dos veces durante la prueba $ rake.
spierepf
2
También puede abrir la consola en un entorno específico, por ejemplo RAILS_ENV=test rails console.
Mori
1
no se preocupe si no ha instalado palanca en su aplicación. también funciona en una consola simple
ImranNaqvi