Hay un problema extraño con Rails 4 en Heroku. Cuando se compilan las imágenes, se les agrega hash, pero la referencia a esos archivos desde CSS no tiene el nombre apropiado ajustado. Esto es lo que quiero decir. Tengo un archivo llamado logo.png. Sin embargo, cuando aparece en heroku, se ve como:
/assets/logo-200a00a193ed5e297bb09ddd96afb953.png
Sin embargo, el CSS aún establece:
background-image:url("./logo.png");
El resultado: la imagen no se muestra. ¿Alguien se topó con esto? ¿Como puede ésto ser resuelto?
ruby-on-rails
heroku
ruby-on-rails-4
Nick ONeill
fuente
fuente
Respuestas:
Sprockets junto con Sass tiene algunos ayudantes ingeniosos que puedes usar para hacer el trabajo. Sprockets solo procesará estos ayudantes si las extensiones de archivo de su hoja de estilo son
.css.scss
o.css.sass
.Ayudante de imagen específica:
Ayudante agnóstico:
O si desea incrustar los datos de la imagen en el archivo css:
fuente
asset-data-url
funciona para mí después de cambiar mi archivo .css a .css.scss en una aplicación Rails 4. ¡Gracias!asset-data-url
porque incrusta todo el archivo dentro de la hoja de estilo.sass-rails
, finalmente terminé agregando la extensión de archivo.scss
a los archivos .css ofensivos para que todos terminen en.css.scss
, luego reemplacé todas las instancias deurl('blah.png')
conurl(asset-path('blah.png'))
(en mi caso, todos los blah.pngs estaban en un/vendor
ed carpeta).asset-url($asset)
debería usarse para las ruedas dentadas 3, la versión con$asset-type
probablemente funciona con alguna versión anteriorNo sé por qué, pero lo único que funcionó para mí fue usar asset_path en lugar de image_path , a pesar de que mis imágenes están en el directorio assets / images / :
Ejemplo:
En rubí:
En .scss:
ACTUALIZAR:
Me di cuenta de que estos ayudantes de activos provienen de la gema sass-rails (que había instalado en mi proyecto).
fuente
background-image: url(asset-path('off.png'))
En Rails 4, puede hacer referencia a una imagen ubicada
assets/images/
en sus.SCSS
archivos fácilmente así:Cuando inicie la aplicación en modo de desarrollo (
localhost:3000
), debería ver algo como:En el modo de producción, sus activos tendrán los números de ayuda de caché:
fuente
production.rb
.El hash se debe a que el canal de activos y el servidor optimizan el almacenamiento en caché http://guides.rubyonrails.org/asset_pipeline.html
Intenta algo como esto:
Buena suerte
fuente
.css
que no funcionó para mí.En css
aunque la ruta original es /assets/images/banner.jpg, por convención debe agregar solo / assets / en el método de URL
fuente
vendor/assets
,app/assets
,lib/assets
, etc.) Se puede combinar en una sola carpeta después de activos prepossessing es completa?/assets/banner.jpg
no funcionará. En cambio, será algo así/assets/banner-f719451f1e0ddd15f153c4eedde044b2.jpg
. TL; DR No uses esto.Ninguna de las respuestas dice sobre la forma, cuando tendré
.css.erb
extensión, cómo hacer referencia a las imágenes . Para mí trabajé tanto en producción como en desarrollo :2.3.1 CSS y ERB
La canalización de activos evalúa automáticamente ERB . Esto significa que si agrega una extensión erb a un activo CSS (por ejemplo,
application.css.erb
), los ayudantes similaresasset_path
están disponibles en sus reglas CSS:Esto escribe la ruta al activo particular al que se hace referencia. En este ejemplo, tendría sentido tener una imagen en una de las rutas de carga de activos, como
app/assets/images/image.png
, que se mencionará aquí. Si esta imagen ya está disponiblepublic/assets
como un archivo de huellas digitales, entonces se hace referencia a esa ruta.Si desea usar un URI de datos, un método para incrustar los datos de la imagen directamente en el archivo CSS , puede usar el
asset_data_uri
ayudante.Esto inserta un URI de datos con el formato correcto en la fuente CSS.
Tenga en cuenta que la etiqueta de cierre no puede ser del estilo -%>.
fuente
Solo este fragmento no funciona para mí:
Pero renombrar stylename.scss a stylename.css.scss me ayuda.
fuente
Haciendo referencia a los documentos de Rails , vemos que hay algunas formas de vincular a imágenes desde CSS. Simplemente vaya a la sección 2.3.2.
Primero, asegúrese de que su archivo css tenga la extensión .scss si es un archivo sass.
A continuación, puede usar el método ruby, que es realmente feo:
O puede usar la forma específica que es más agradable:
Por último, puede usar la forma general:
fuente
LO QUE HE ENCONTRADO DESPUÉS DE HORAS DE MUCHO CON ESTO:
TRABAJOS :
Lo anterior genera algo como:
"/assets/transparent_2x2-ec47061dbe4fb88d51ae1e7f41a146db.png"
Observe el "/" inicial , y está entre comillas . También tenga en cuenta la extensión scss y el ayudante image_path en yourstylesheet.css.scss. La imagen está en el directorio app / assets / images .
No funciona
no funciona, propiedad no válida:
Mi último recurso sería ponerlos en mi cubo público s3 y cargarlos desde allí, pero finalmente conseguí algo.
fuente
Curiosamente, si uso 'background-image', no funciona:
Pero solo 'fondo', lo hace:
fuente
En algunos casos, lo siguiente también puede ser aplicable
logo {background: url (<% = asset_data_uri 'logo.png'%>)}
Fuente: http://guides.rubyonrails.org/asset_pipeline.html
fuente
Al usar gemas 'sass-rails', en Rails 5, bootstrap 4, lo siguiente funcionó para mí,
en el archivo .scss:
en el archivo de vista (por ejemplo, .html.slim):
fuente
Esto debería llevarte allí cada vez.
fuente
Por defecto, Rails 4 no servirá sus activos. Para habilitar esta funcionalidad, debe ir a config / application.rb y agregar esta línea:
https://devcenter.heroku.com/articles/rails-4-asset-pipeline#serve-assets
fuente
En Rails 4, simplemente use
.hero { background-image: url("picture.jpg"); }
fuente
Puede agregar a su extensión css .erb. Ej: style.css.erb
Entonces puedes poner:
fuente
Esto funcionó para mí:
fuente