2011-09-03 32 views
5

Acabo de actualizar mi aplicación en Heroku de Rails 3.0 a 3.1, y estoy tratando de hacer que la tubería de activos funcione. El principal problema es que puedo leer desde el heroku ingrese el siguiente tipo de líneas, para cada activo:Pipeline de activos al actualizar a Rails 3.1 en Heroku

2011-09-03T16:35:28+00:00 app[web.1]: cache: [GET /assets/border-a3c571a354b9381740db48aeebfaa63a.jpg] miss 

Si entiendo la tubería correctamente, esto no debería ser "miss" para cada pedido que haga a partir de una navegador, pero debe encontrarse en la memoria caché.

lectura de la documentación Heroku se puede encontrar esta explicación:

Rails 3.1 provides an assets:precompile rake task to allow the compilation penalty to be paid up front rather than each time the asset is requested. If this task exists in your app we will execute it when you push new code. 

Pero ¿cómo se debe que "activos: precompilación" será tarea? Traté de crear un proyecto con raíles 3.1 desde cero para intentar averiguarlo, pero no existe tal tarea en un proyecto simple. ¿O me estoy perdiendo algo? ¿Cómo podría hacer para que los activos se encuentren en el caché? Tal vez es solo un problema con la configuración.

Estas son las opciones de mi fichero de configuración producción:

config.serve_static_assets = false 
config.assets.compress = true 
config.assets.compile = true # If I turn this off I get a 500 error and logs say that an asset isn't compiled 

Mi application.rb tiene esta línea:

config.assets.enabled = true 

Gracias mucho por su ayuda!

+0

Compilo los activos directamente en heroku, no contaminando mi repositorio local con activos compilados. Use el comando: heroku run rake assets: precompile –

Respuesta

4

Me preguntaba lo mismo, pero aquí es una punta para ayudar a determinar si sus activos son en vivo-compilar o no

  1. plazo rake assets:precompile localmente
  2. introducir algunas modificaciones en el CSS, pero no hago vuelva a ejecutar la tarea rake
  3. git add, cometer y empujar a heroku

Si los cambios realizados en el paso 2 se muestran en él roku, entonces sabes que tu aplicación está compilando en vivo

No olvides que ahora estás a cargo del almacenamiento en caché HTTP, ya que Varnish ya no está incluido en Celadon, por lo que debes configurar el rack-cache y memorizarlo tú mismo:

Pero sí, me encontré con este desconcertante demasiado

+0

Gracias por su respuesta, está lleno de información importante. – alvatar

1

Se puede tratar con config.serve_static_assets conjunto de true y

config.action_dispatch.x_sendfile_header = "X-Sendfile" 

añadido a su archivo config/environments/production.rb?

Cuando inserte su código en Heroku, debería ver la precompilación anunciada por el compilador de babosas AFAICT.

+0

"-----> Preparando la aplicación para la canalización de recursos de Rails" aparece, pero también lo hizo antes. Aún así, se producen errores de caché ... – alvatar

+0

¿No debería usar la directiva ngnix? 'config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'' – tibbon

1

Asegúrate de estar en el Heroku "Cedar" stack. Entonces Heroku will automatically precompile your assets during slug compilation.

Nota: Todavía estoy recibiendo "fallas en la memoria caché" también, pero no creo que sea cierto porque su aplicación no funcionaría si sus activos no se compilaran.

+3

sí, tengo la pila Cedar. Si tiene activada la "compilación en vivo", la compilará cada vez que falte un caché. En realidad, si desactivo esta opción (con 'config.assets.compile = true') entonces no funciona en absoluto. – alvatar

5

También, echar un vistazo a http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

Para precompila activos más rápidas, puede cargar parcialmente su aplicación estableciendo config.assets.initialize_on_precompile a falsa en config/application.rb, aunque en ese caso las plantillas no pueden ver los objetos 0 métodos de la aplicación . Heroku requiere que esto sea falso

Cuestiones relacionadas