2012-03-14 18 views
17

En modo de producción, los rieles no parecen encontrar ningún recurso precompilado de la canalización de activos.¿Por qué Rails no encontrará mis activos?

Estoy usando rails 3.2.0 y ruby ​​1.9.3 corriendo dentro de RVM en CentOS. No se está ejecutando ningún servidor web adicional junto con esta aplicación. La aplicación solo se actualizó recientemente para usar la canalización de activos, ya que originalmente era una aplicación de rieles 3.0.

Después de ejecutar

rake assets:clean 
rake assets:precompile 

veo el contenido de hash en público/activos, lo que cabe esperar. Los valores hash al final de los archivos coinciden con los que veo en el origen de la página.

Sin embargo, en tiempo de ejecución, esto es lo que veo por cada rieles de activos trata de servir:

Started GET "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" for 75.149.58.169 at 2012-03-14 11:42:43 -0700 

ActionController::RoutingError (No route matches [GET] "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"): 

no me refiero a la carpeta que cada activo se encuentra en; todas las referencias a los activos se ven como los siguientes:

//css: 
.class { 
    background: url(asset.png) no-repeat; 
} 

//erb: 
<%= image_tag "asset.png" %> 
<%= link_to "page", :class => "class" %> 

de tuberías de Activos ajustes pertinentes en production.rb:

config.serve_static_assets = false 
config.assets.enabled = true 
config.assets.compress = true 
config.assets.debug = false 
config.assets.compile = false 
config.assets.digest = true 

Y, por último, la configuración de activos de config/application.rb:

config.assets.enabled = true 
config.assets.version = '1.0' 

El usuario que inicia el proceso del servidor de rieles ha leído, escrito y ejecuta permisos en public/assets, por lo que no creo que sea un problema de permisos. ¿Me perdí un paso de configuración?

Editar

me di cuenta de que no hay errores que indican que los activos no están precompilados, por lo que trataron de acceder a una hoja de estilo de la página web añadiendo "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" a la Fin de la ruta del host:

http://www.myapp.com"/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" 

Esto funcionó y se abrió la hoja de estilo.

+0

Relacionados/duplicados: http://stackoverflow.com/questions/5760661/rails-favicon-ico-not-found –

Respuesta

26

Además la investigación de este tema produjo este SO artículo:

application.css not being served as an asset

Parece

config.serve_static_assets = false 

es un ajuste incorrecto mientras mi aplicación Rails no se está ejecutando detrás de Apache o Nginx

+0

Me sorprendió esto. Por lo general, usa Apache pero en esta ocasión usaba Thin a través de IIS. ¡Gracias! – kim3er

4

Tuve el mismo problema, pero observo que su hoja de estilo está apuntando a las huellas dactilares, no en caché versión de los archivos. Si está utilizando la canalización de activos, para aprovecharla, debe usar los ayudantes que apuntan a la versión de los archivos con huella dactilar. Para hacer esto, necesitará incrustar erb en su archivo css, o usar sass.

incorrecta:

.class { 
    background: url(asset.png) no-repeat; 
} 

correcta (utiliza Sass):

.class 
    background: image-url('asset.png') no-repeat 

Para obtener más información, consulte aquí: http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets

Si no se preocupan por los problemas de rendimiento, puede salirse con la suya usando las versiones que no están en caché hasta que actualice a Rails 4 o Rails 3.2.16, porque esas versiones introducen cambios bruscos que lo fuerzan a usar la canalización de activos (y s sintaxis correspondiente). Si no utiliza la nueva sintaxis, las versiones no almacenadas en caché no funcionarán en absoluto en producción.

+0

¡Oye, gracias! Sin embargo, desde que se publicó esta pregunta, terminamos migrando activos a un CDN, pero lo recordaré para futuros proyectos de Rails. – BrMcMullin

+0

¡De nada! :RE –

Cuestiones relacionadas