Heroku上的Rails 4有一个奇怪的问题。当图像被编译时,它们被添加了散列,但从CSS中引用这些文件时没有适当的名称调整。这就是我的意思。我有一个叫logo。png的文件。然而,当它出现在heroku上时,它被视为:
/assets/logo-200a00a193ed5e297bb09ddd96afb953.png
然而,CSS仍然声明:
background-image:url("./logo.png");
结果是:图像无法显示。有人遇到过这种情况吗?如何解决这个问题?
Heroku上的Rails 4有一个奇怪的问题。当图像被编译时,它们被添加了散列,但从CSS中引用这些文件时没有适当的名称调整。这就是我的意思。我有一个叫logo。png的文件。然而,当它出现在heroku上时,它被视为:
/assets/logo-200a00a193ed5e297bb09ddd96afb953.png
然而,CSS仍然声明:
background-image:url("./logo.png");
结果是:图像无法显示。有人遇到过这种情况吗?如何解决这个问题?
当前回答
没有一个答案是关于。css的。Erb扩展,如何引用图像。对我来说,我同时从事生产和开发工作:
2.3.1 CSS和ERB
资产管道自动评估ERB。这意味着如果你添加一个erb扩展到一个CSS资产(例如,application.css.erb),那么像asset_path这样的助手在你的CSS规则中是可用的:
.class { background-image: url(<%= asset_path 'image.png' %>) }
这将写入被引用的特定资产的路径。在这个例子中,在一个资源加载路径中有一个图像是有意义的,比如app/assets/images/image.png,这里将引用它。如果此图像已作为指纹文件在公共/资产中可用,则会引用该路径。
如果您想使用数据URI(一种将图像数据直接嵌入到CSS文件中的方法),您可以使用asset_data_uri帮助器。
.logo { background: url(<%= asset_data_uri 'logo.png' %>) }
这将在CSS源中插入格式化正确的数据URI。
注意,结束标记的样式不能是-%>。
其他回答
你可以添加到你的css .erb扩展名。Ej: style.css.erb
然后你可以放:
background: url(<%= asset_path 'logo.png' %>) no-repeat;
只有这个片段不适合我:
background-image: url(image_path('transparent_2x2.png'));
但是要重命名stylename。SCSS到stylename.css.scss帮助我。
这应该能让你每次都做到。
background-image: url(<%= asset_data_uri 'transparent_2x2.png'%>);
这招对我很管用:
background: #4C2516 url('imagename.png') repeat-y 0 0;
不知道为什么,但唯一对我有用的是使用asset_path而不是image_path,即使我的图像是在assets/images/目录下:
例子:
app/assets/images/mypic.png
在Ruby中:
asset_path('mypic.png')
在.scss:
url(asset-path('mypic.png'))
更新:
弄清楚了-原来这些资产助手来自sass-rails gem(我已经安装在我的项目中)。