2011-10-26 20 views
10

El problema en pocas palabras es que en el modo de desarrollo haríamos cambios a los archivos CSS o JS, pero siempre obtendría versiones en caché/antiguas de estos archivos. Nada de lo que hice tuvo ningún efecto. Comprobé la configuración docenas de veces e intenté todas las combinaciones de valores de configuración, pero siempre obtuve los mismos resultados: archivos obsoletos/en caché. De hecho, tuve que ejecutar en modo de producción y reiniciar el servidor después de cada cambio para probar.Carril de activos de Rails 3.1.1 Heroku caching gotcha

Pasé días arreglándome los pelos por este tema, miré docenas de preguntas sobre el flujo de activos en el inventario de activos, pero nunca encontré una que lo abordara, así que pensé en publicarlo aquí para la posteridad.

Usamos Heroku y precompilamos nuestros activos porque Heroku no puede precompilar para nosotros (también usamos el dispositivo que aparentemente es la causa de la falla de precompilación de heroku). Entonces, para llevar nuestros activos precompilados a Heroku, tenemos que registrarlos en Git.

Aquí está el problema.

Cuando actualizamos a Rails 3.1.1 la precompilación de activos produjo archivos con y sin el hash MD5 en el nombre. No pensé mucho de esto y seguí y revisé todos estos archivos para poder presionar a heroku. Algún tiempo después noté el problema con los resultados almacenados en caché en modo de desarrollo. Los activos precompilados y registrados sin los hash MD5 se estaban publicando desde/public/assets como archivos estáticos que nos impedían ver los cambios que estábamos realizando en/app/assets.

Después de finalmente darme cuenta de esto, ejecuté git rm/public/assets y todo funciona nuevamente. Así que la comida para llevar es: ¡Tenga cuidado al consultar activos en git!

Para convertir esto en una pregunta: ¿cómo otros hacen esto? ¿Me estoy perdiendo algo obvio? Lo que realmente me gustaría es que Heroku precompile mis recursos para mí, pero está fallando con un error de conexión de base de datos que creo que se debe al diseño. Esperaba que Rails 3.1.1 arreglara esto pero no fue así.

Respuesta

12

¿Has echado un vistazo a este devise issue en github? Específicamente José Valim dice

Rails 3.1.1 final tiene un método llamado config.assets.initialize_on_precompile. Si lo configura en falso, debería ser bueno, pero no le permitirá acceder a la información del modelo en sus activos (que probablemente no debería tener).

Quizás esto permita que ocurra la precompilación en Heroku para usted.

+0

Dty, había intentado esta configuración exacta antes de publicar esta pregunta, pero no funcionó para mí en ese momento. Sin embargo, lo intenté nuevamente, esta vez con Devise 1.4.9 y he aquí que funciona. Gracias por la sugerencia que me hizo probar esto de nuevo. –

+0

@ JeffCutler-Stamm ¡me alegro de que funcionó! También estoy alojando una aplicación de rieles 3.1.1 en heroku pero aún no he agregado ningún dispositivo (pero lo haré pronto) – Dty

+1

Me gustaría señalar que lo agregaste a config/application.rb –

0

Verificar this guide de Heroku. Describe las 3 formas de implementar las aplicaciones de Rails 3.1. Dos de estos no requieren precompilación local.

+0

Gracias, pero ninguno de esos me funciona. Como mencioné en la pregunta, creo que esto se debe a la idea. La precompilación durante la compilación de slug siempre falla con un error de conexión a la base de datos. –

+0

¿Estás diciendo que la compilación de tiempo de ejecución falla para ti? –

+0

sí, la compilación del tiempo de ejecución falla, así que estoy atascado con precompilación antes de enviar a heroku. –

1

La razón por la compilación previa de activos no funciona bien podría ser, que los VARs Heroku ENV no están presentes en la compilación de trozos (desplegar) como se indica aquí:

http://devcenter.heroku.com/articles/rails31_heroku_cedar

hay una manera (experimental) para permitir que la ENV vars durante el despliegue exactamente por esta razón, encontrar información aquí:

http://devcenter.heroku.com/articles/labs-user-env-compile

Espero que esto ayude.

Cuestiones relacionadas