Heroku上的Rails 4有一个奇怪的问题。当图像被编译时,它们被添加了散列,但从CSS中引用这些文件时没有适当的名称调整。这就是我的意思。我有一个叫logo。png的文件。然而,当它出现在heroku上时,它被视为:

/assets/logo-200a00a193ed5e297bb09ddd96afb953.png

然而,CSS仍然声明:

background-image:url("./logo.png");

结果是:图像无法显示。有人遇到过这种情况吗?如何解决这个问题?


当前回答

这应该能让你每次都做到。

background-image: url(<%= asset_data_uri 'transparent_2x2.png'%>);

其他回答

当使用宝石'sass-rails'时,在Rails 5, bootstrap 4中,以下对我有用,

在.scss文件:

    background-image: url(asset_path("black_left_arrow.svg"));

视图文件(例如.html.slim):

    style=("background-image: url(#{ show_image_path("event_background.png") })");

我摆弄了几个小时后发现:

工作原理:

background-image: url(image_path('transparent_2x2.png')); 

// how to add attributes like repeat, center, fixed?

上面的输出类似于:“/assets/transparent_2x2-ec47061dbe4fb88d51ae1e7f41a146db.png”

注意前面的“/”,它在引号内。 还要注意stylesheet.css.scss中的scss扩展和image_path帮助器。图片在app/assets/images目录下。

不工作:

background: url(image_path('transparent_2x2.png') repeat center center fixed;

无效属性:

background:url(/assets/pretty_photo/default/sprite.png) 2px 1px repeat center fixed;

我最后的办法是把这些放到我的公共s3桶里,然后从那里加载,但最后还是有了一些东西。

散列是因为资产管道和服务器优化缓存 http://guides.rubyonrails.org/asset_pipeline.html

试试这样做:

 background-image: url(image_path('check.png'));

古德勒克

默认情况下,Rails 4不会为您的资产服务。要启用此功能,您需要进入配置/应用程序。Rb,加上这一行:

config.serve_static_assets = true

https://devcenter.heroku.com/articles/rails-4-asset-pipeline#serve-assets

链轮一起萨斯有一些漂亮的帮手,你可以用它来完成工作。链轮只会在样式表文件扩展名为.css时处理这些helper。或。css.sass。


图像特定的帮助器:

background-image: image-url("logo.png")

不可知论者的助手:

background-image: asset-url("logo.png", image)
background-image: asset-url($asset, $asset-type)

或者如果你想在css文件中嵌入图像数据:

background-image: asset-data-url("logo.png")