2012-06-12 9 views
9

Tuve el siguiente problema con la cartera de activos.Pruebas de tubería de activos de rieles pasan producción rota

  • Tengo un correo HTML con una imagen adentro.
  • Tengo pruebas que cubren el caso en el que el correo electrónico se envía con éxito.
  • Pasan todas las pruebas.
  • Al pasar a producción, la característica que requiere que se envíe el correo electrónico se rompe, porque el diseño HTML hace referencia a una imagen que no existe.

Esto obviamente se aplica a todos los activos precompilados.

Me parece que de repente las pruebas ya no son confiables. ¿Hay alguna manera de evitar que esta situación vuelva a suceder?

+0

¿Ha configurado el entorno de prueba para usar activos precompilados? – shigeya

+0

¿quiere decir "config.assets.compile = false"? Si hago eso, necesito precompilar los activos cada vez que realizo pruebas. ¿Es esta una posible solución? –

Respuesta

12

Encontré la solución perfecta para mi propio caso. Si establece

config.assets.compile = false 
config.assets.digest = true 

en el entorno de prueba, sus pruebas dependerán de los activos precompilados.

Dado que es molesto precompilar activos cada vez durante las fases de desarrollo rápido y prueba, en mi caso es suficiente tener esta configuración solo en CI.

Puede configurar un inicializador llamada ci_config.rb con lo siguiente:

if ENV['CI'] 
    class YourApp::Application 
    config.assets.compile = false 
    config.assets.digest = true 
    end 
end 

y configura para funcionar CI activos rastrillo: compilación previa de los activos de inicio y rastrillo: limpia de punta.

+1

Esto es increíble. Gracias. – Pezholio

2

Compare las opciones de configuración predeterminadas en application.rb, production.rb y development.rb, y lea Configuring Rails Applications in Ruby on Rails Guide para conocer las opciones.

opciones son importantes, siguientes:

config.serve_static_assets: active esta falsa (por defecto de producción) y, a continuación, los carriles no servirán contenidos estáticos.

config.assets.compile: compila los activos que usan el inventario de activos para compilar si es necesario.

Si configura las dos opciones anteriores en false (esta es la configuración predeterminada para producción), entonces necesita 1) precompilar y colocar contenido estático en los lugares adecuados, 2) configurar servidor web (apache o nginx, puede ser) para publicar contenido estático según sea necesario.

Por lo tanto, para la producción, es necesario no sólo colocar los archivos, sino también configurar el servidor web para servirlos o puede configurar serve_static_assets para crear activos sobre la marcha. Es posible que deba ajustar la configuración de la prueba, pero para la prueba serve_static_assets es verdadera a menos que la modifique.

+0

gracias por la respuesta, pero estaba buscando una respuesta que se centrara en cómo configurar una práctica de prueba para evitar que el caso descrito vuelva a suceder. –

+0

@shigeya, el problema era que el ambiente de prueba y las configuraciones del entorno de producción son diferentes con respecto a la cartera de activos.Imagine que ha agregado un nuevo archivo javascript a sus activos, pero olvidó incluir el nombre del archivo en config.assets.precompile array. En este caso, las pruebas pasarían (con config.assets.compile = true), pero la producción fallaría (con config.assets.compile = false). Por lo tanto, la pregunta no era sobre cómo utilizar la cartera de activos, sino cómo hacer que los entornos de producción y prueba funcionen de la misma manera. La respuesta de Fabrizio es una posible solución para este problema en particular. – Grimmo

+0

Gracias por tu comentario. Creo que su suposición es correcta para el caso de Fabrizio. Para mi situación, he configurado la matriz config.assets.precompile. entonces podría ser una razón diferente. Ya no puedo reproducir eso, así que no puedo verificarlo. – shigeya

Cuestiones relacionadas