asset-pipeline - precompiling - rails 5 asset pipeline heroku
¿Por qué Rails no encuentra mis activos? (2)
Investigaciones adicionales sobre este tema dieron como resultado este artículo de SO:
application.css no se sirve como un activo
Parece
config.serve_static_assets = false
Es una configuración incorrecta siempre que mi aplicación Rails no se esté ejecutando detrás de Apache o nginx
Cuando se encuentra en modo de producción, parece que los rieles no pueden encontrar ningún activo precompilado del flujo de activos.
Estoy usando los rieles 3.2.0 y ruby 1.9.3 corriendo dentro de RVM en CentOS. Ningún servidor web adicional se está ejecutando junto con esta aplicación. La aplicación solo se actualizó recientemente para utilizar el flujo de activos, ya que originalmente era una aplicación de Rails 3.0.
despues de correr
rake assets:clean
rake assets:precompile
Veo el contenido hash en público / activos, como es de esperar. Los hashes al final de los archivos coinciden con los que veo en la fuente de la página.
Sin embargo, en el tiempo de ejecución, esto es lo que veo para cada activo que Rails intenta atender:
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 en la que se encuentra cada activo; Todas las referencias a los activos se parecen a estos:
//css:
.class {
background: url(asset.png) no-repeat;
}
//erb:
<%= image_tag "asset.png" %>
<%= link_to "page", :class => "class" %>
Configuración pertinente de la tubería de activos 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 tiene permisos de lectura, escritura y ejecución en públicos / activos, por lo que no creo que sea un problema de permisos. ¿Me he perdido un paso de configuración?
Editar
Noté que no hay errores que indiquen que los activos no están precompilados, así que intenté acceder a una hoja de estilo desde la página web agregando "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" al final de la ruta del host:
http://www.myapp.com"/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"
Esto funcionó y la hoja de estilo se abrió.
Tuve el mismo problema, pero observo que su hoja de estilo apunta a la versión de los archivos sin huellas dactilares ni caché. Si está utilizando la canalización de activos, para poder aprovecharla, debe utilizar los ayudantes que apuntan a la versión de los archivos con huellas dactilares y en caché. Para hacer esto, deberás incrustar erb en tu archivo css, o usar sass.
Incorrecto:
.class {
background: url(asset.png) no-repeat;
}
Correcto (usa 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 le importan los problemas de rendimiento, puede utilizar las versiones no almacenadas en caché hasta que actualice a Rails 4 o Rails 3.2.16, porque esas versiones introducen cambios de última hora que lo obligan a usar el canal de activos (y su correspondiente sintaxis). Si no usa la nueva sintaxis, las versiones no almacenadas en caché no funcionarán en absoluto en la producción.