我在/app/assets/stylesheets/styles.css.erb
:
...
#nestedbg {
background-position: left top;
background-image: url(<%= asset_path 'siteheader2.png' %>);
background-repeat: repeat-x;
background-attachment: fixed;
}
...
当我运行rake assets:precompile
然后运行rails s -e production
时,一切都按预期工作。但是,当我删除预编译资产并在开发中运行rails s
时,CSS文件如上所示出现,而不是被正确替换。
我尝试将config.assets.compile = true
放入/config/environments/development.rb
,但没有帮助。
有什么想法吗? 感谢。
答案 0 :(得分:8)
老实说,我不能说为什么在你的情况下没有正确解释,但我有一个更好的解决方法:完全跳过erb解释。
你可以这样做:
/* styles.css.scss */
background-image:url(image_path("siteheader2.png"));
如果你没有机会我也建议have a look at SASS:它集成在Rails资产管道中,让你做一些很酷的事情,比如变量声明,嵌套,混合,...
答案 1 :(得分:4)
我发现我的css文件不会被ERB处理,除非还添加了SCSS处理。
我将screen.css.erb
更改为screen.css.scss.erb
,现在<%= asset_path 'file.png' %>
正确呈现为/assets/file.png
。
我在Rails 3.1.3上。
答案 2 :(得分:2)
我使用的是Rails 3.1.1,当我将应用程序切换为使用Rails 3.1.3时,问题就消失了。我切换回3.1.1以查看问题是否回来了,但事实并非如此。
我猜测它是其中一个宝石的问题,3.1.3的更新带来了其他宝石更新。
答案 3 :(得分:0)
奇怪的是,我发现将asset_path
更改为asset_data_uri
,然后再将asset_path
更改为我。一直使用Rails 3.1.3。
奇怪。
答案 4 :(得分:0)
Sam Oliver的建议对我有用,只是重命名扩展没有更新文件的时间戳。
答案 5 :(得分:0)
CSS和ERB
资产管道自动评估ERB。这意味着如果您向CSS资产添加erb扩展名(例如,application.css.erb),那么CSS规则中会提供像asset_path这样的帮助程序:
.class { background-image: url(<%= asset_path 'image.png' %>) }
这会写入被引用的特定资产的路径。在这个例子中,在一个资产加载路径中有一个图像是有意义的,例如app / assets / images / image.png,这里将引用它。如果此图像已作为指纹文件在公共/资源中可用,则引用该路径。
如果您想使用数据URI(一种将图像数据直接嵌入CSS文件的方法),您可以使用asset_data_uri帮助程序。
CSS和Sass:
使用资产管道时,必须重写资产路径,并且sass-rails为以下资产类提供-url和-path帮助程序(在Sass中用连字符连接,在Ruby中加以强调):图像,字体,视频,音频,JavaScript和样式表。
image-url("rails.png") becomes url(/assets/rails.png)
image-path("rails.png") becomes "/assets/rails.png".
也可以使用更通用的表单,但必须同时指定资产路径和类:
asset-url("rails.png", image) becomes url(/assets/rails.png)
asset-path("rails.png", image) becomes "/assets/rails.png"
引用者:Rails Guide Asset Pipe Line
标题:分别为2.2.1和2.2.2。