ruby-on-rails-3.1 - rails - the asset logo png is not present in the asset pipeline
Rieles 3.1: determinar si el activo existe (4)
¿Hay una forma integrada de determinar si un activo existe sin recurrir a File.exists?(File.join(Rails.root, "foo", "bar", "baz"))
y que busca en las rutas de los activos.
Mi aplicación va y recupera imágenes de un servidor remoto en una cola de Resque; hasta que tengamos la imagen descargada quiero servir una imagen de marcador de posición. Actualmente estoy usando File.exists
... pero esto significa codificar de forma rígida una ruta, lo que apesta, o mirar a través de las rutas de activos configuradas. Parece que esto ya debería estar allí, pero no puedo encontrarlo en los documentos.
Consulte la respuesta aquí para ver una discusión sobre por qué find_asset
no siempre funciona:
Dada una imagen en app/assets/images/lolshirts/theme/bg-header.png
,
Rails.application.assets.find_asset ''lolshirts/theme/bg-header.png''
=> #> Sprockets::StaticAsset:0x80c388ec pathname="/Users/joevandyk/projects/tanga/sites/lolshirts/app/assets/images/lolshirts/theme/bg-header.png", mtime=2011-10-07 12:34:48 -0700, digest="a63cc84aca38e2172ae25de3d837c71a">
Rails.application.assets.find_asset ''notthere.png''
=> nil
Dado que esta sigue siendo la pregunta principal cuando se busca en Google, y como la respuesta aceptada no funciona correctamente en la producción (al menos en algunos casos), aquí está la solución que me funciona (Rails 4.2.5.1):
def asset_exist?(path)
if Rails.configuration.assets.compile
Rails.application.precompiled_assets.include? path
else
Rails.application.assets_manifest.assets[path].present?
end
end
Esto se copia de este problema github
Ver esta respuesta: https://.com/a/8217598/549252
= Rails.application.assets.find_asset("my_asset.css").nil?