Rails 4 image-path, image-url y asset-url ya no funcionan en los archivos SCSS

¿Se supone que debemos usar algo más aparte de image-url y otros en Rails 4? Devuelven diferentes valores que no parecen tener sentido. Si tengo logo.png en /app/assets/images/logo.png y hago lo siguiente, esto es lo que obtengo:

 image-url("logo.png") -> url("/images/logo.png") #obviously doesn't work image-path("logo.png") -> "/images/logo.png" asset-url("logo.png") -> url("/logo.png") 

Por supuesto, ninguno de estos funciona porque necesitan al menos /assets en el frente.

ACTUALIZACIÓN : En realidad, acabo de notar, ¿cómo puedo acceder a las imágenes en Rails 4? Tengo una imagen en /app/assets/images/logo.png . Pero si voy a cualquiera de las siguientes URL, aún no veo mi imagen:

 http://localhost:3000/assets/logo.png http://localhost:3000/assets/images/logo.png http://localhost:3000/logo.png http://localhost:3000/images/logo.png 

ACTUALIZACIÓN 2 : La única forma en que puedo abrir mi logo.png es moviéndolo al directorio /app/assets/stylesheets y luego tirando hacia arriba:

 http://localhost:3000/assets/logo.png 

Acabo de tener este problema yo mismo. 3 puntos que con suerte ayudarán:

  • Si coloca imágenes en su directorio de app/assets/images , entonces debería poder llamar a la imagen directamente sin ningún prefijo en la ruta. es decir. image_url('logo.png')
  • Dependiendo de dónde use el activo, dependerá del método. Si lo está utilizando como una background-image: propiedad, entonces su línea de código debe ser background-image: image-url('logo.png') . Esto funciona para hojas de estilo menos y sass. Si lo está usando en línea en la vista, necesitará usar el asistente image_tag en los Rails para generar su imagen. Una vez más, sin prefijo <%= image_tag 'logo.png' %>
  • Por último, si está precomstackndo sus activos, ejecute los rake assets:precompile para generar sus activos o rake assets:precompile RAILS_ENV=production para producción; de lo contrario, su entorno de producción no tendrá los activos de huellas dactilares cuando cargue la página.

También para esos comandos en el punto 3 necesitarás prefijarlos con bundle exec si estás ejecutando bundler.

Su primera formulación, image_url('logo.png') , es correcta. Si se encuentra la imagen, generará la ruta /assets/logo.png (más un hash en producción). Sin embargo, si Rails no puede encontrar la imagen que usted nombró, recurrirá a /images/logo.png .

La siguiente pregunta es: ¿por qué Rails no encuentra su imagen? Si lo pones en app / assets / images / logo.png, entonces deberías poder acceder accediendo a http://localhost:3000/assets/logo.png .

Si eso funciona, pero su CSS no se está actualizando, es posible que deba borrar el caché. Elimine tmp/cache/assets de su directorio de proyecto y reinicie el servidor (webrick, etc.).

Si eso falla, también puedes intentar usar background-image: url(logo.png); Eso hará que su CSS busque archivos con la misma ruta relativa (que en este caso es / assets).

Tuve un problema similar al intentar agregar una imagen de fondo con css en línea. No es necesario especificar la carpeta de imágenes debido a la forma en que funciona la sincronización de activos.

Esto funcionó para mí:

 background-image: url('/assets/image.jpg'); 

Me acabo de asset_url , que al usar asset_url helper resuelves ese problema.

 asset_url("backgrounds/pattern.png", image) 

Rails 4.0.0 verá la imagen definida con image-url en la misma estructura de directorios con su archivo css.

Por ejemplo, si su CSS en assets/stylesheets/main.css.scss , image-url('logo.png') convierte en url(/assets/logo.png) .

Si mueve su archivo css a assets/stylesheets/cpanel/main.css.scss , image-url('logo.png') convierte en /assets/cpanel/logo.png .

Si desea usar la imagen directamente en el directorio assets / images, puede usar asset-url('logo.png')

para hojas de estilo: url (asset_path (‘image.jpg’))