2011-10-01 22 views
14

Recientemente actualicé mi aplicación a rails 3.1 y, en general, todo parece funcionar, pero una cosa me está volviendo loco.Javascript está almacenado en caché en modo de desarrollo con canalización de activos

Tengo 2 archivos js principales, los llamaremos, application.js y main.js.

application.js tiene mi material manifiesto y se está cargando en main.js. Eso está funcionando bien. Mi problema es cuando estoy en modo de desarrollo y hago un cambio en main.js, luego actualizo la página, el sitio no recoge el cambio. Para obtener el cambio, reinicié el servidor de rieles.

Tengo el modo de depuración activado en el desarrollo, pero me pregunto si me falta otra configuración.

¿Alguien se encuentra con esto antes?

+1

Tengo el mismo problema, con la esperanza de encontrar una solución aquí. Parece que no puedo encontrar ninguna manera de evitar que se me sirva un archivo JS en caché (o CSS para ese asunto). Sux en esos días difíciles cuando todo lo que puedes hacer es cambiar una pequeña cosa a la vez, tienes que seguir reiniciando el WEBrick una y otra vez ... –

Respuesta

14

Tuve el mismo problema, pero config.action_controller.perform_caching ya estaba configurado en falso.

Para mí y para otro chico con el que estaba trabajando, el problema era que Chrome estaba almacenando en caché la página a pesar de la configuración en Rails.

Para solucionarlo, simplemente cerramos la pestaña, abrimos una nueva pestaña y volvimos a visitar el sitio.

+0

Esto terminó siendo el tema de Chrome en realidad. Todavía no tengo idea de por qué, pero tuve que borrar manualmente la caché del navegador y luego recogió los cambios. – JoshReedSchramm

+1

Esto me pasó a mí, al reiniciar el navegador parecía solucionar este problema ... era como si de repente decidiera servir en caché a pesar de tener perform_caching establecido en falso. Extraño. – StuR

+1

Acabo de pasar las últimas 3 horas tratando de resolver este problema. Incluso reinicié mi computadora, pero dado que OSX ahora guarda las ventanas abiertas de tu navegador, aparentemente eso no lo hizo. Cerré la pestaña, la abrí y el problema fue resuelto. Creo que voy a dispararme ahora. –

1

Eche un vistazo a su registro de desarrollo y vea lo que dice cuando se sirve el archivo application.js.

Debe ser algo como esto para una solicitud normal (ha navegado hasta la página):

 
Started GET "/assets/application.js" for 127.0.0.1 at Fri Sep 30 12:13:27 +1300 2011 
Served asset /application.css - 304 Not Modified (2ms) 

Si no es posible que no haya configurado correctamente las opciones de tuberías. Una de las configuraciones de producción podría estar en el lugar equivocado. Section 9 de la guía de inventario de activos tiene una lista de verificación de la configuración correcta para una aplicación migrada.

+1

yah i get Start GET "/assets/main.js?body=1" for 127.0.0.1 at 2011-10-01 16:22:16 -0400 Activo servido /main.js - 304 No modificado (0ms) – JoshReedSchramm

+0

bah no hay saltos de línea en los comentarios. parece que está sirviendo desde el caché, volveremos a mirar la guía – JoshReedSchramm

+0

¿Qué encabezados ves en el navegador? –

2

Tuve el mismo problema, y ​​finalmente tropecé con algo en mi development.rb. Tenía config.action_controller.perform_caching establecido en verdadero, y cambiarlo a falso resolvió el problema.

2

Abrir Chrome en modo incógnito funcionó mejor para mí. No es necesario abrir y cerrar una pestaña. En modo de incógnito, Chrome no guarda en caché javascript.

1

Tuve el mismo problema, config.action_controller.perform_caching establecido correctamente. También utilizo Heroku y recursos de precompilación para Push to Heroku usando: RAILS_ENV = activo de paquete de producción activos de rastrillo: precompilación Después de la inserción, cuando comencé un nuevo trabajo, olvidé eliminar los activos precompilados usando: sudo rm -r public/assets/*

Así que, no importa lo que hice con ninguno de mis archivos .js, estos cambios no se mostraban.

2

También tenga en cuenta que si habilita config.threadsafe, activará cache_classes. Así que si su archivo de configuración/ambientes/development.rb contiene lo siguiente:

config.cache_classes = false 
config.threadsafe! 

entonces usted está apagando cache_classes y luego convirtiéndolo derecha de nuevo. Necesitarás comentar la configuración.-hilo (si no lo necesita) así:

config.cache_classes = false 
# config.threadsafe! 

O, si usted necesita multi-hilo, invertir el orden de estas dos configuraciones de manera que config_classes es realmente parado:

config.threadsafe! 
config.cache_classes = false 

Para más información, vea http://tenderlovemaking.com/2012/06/18/removing-config-threadsafe.html

4

Tuve el mismo problema y encontré que la eliminación de los resúmenes de activos en desarrollo solucionó el problema. Asegúrese de que establece en false en developmen.rb:

config.assets.digest = false 
0

Si anteriormente mencionados respuestas fallan en su contexto ..

asegúrese de que el almacenamiento en caché se realiza mediante carriles .. algunas veces no se detectan cambios en activo y servir a la versión en caché mayores ..

uso rails c >> Rails.cache.clear
o simplemente borrar las cachés en tmp dir

[project_dir/tmp/cache/assets"]

Cuestiones relacionadas