Rails资产路径中的CSS未由ERB在开发中处理

我在/app/assets/stylesheets/styles.css.erb有一个带有以下内容的Rails应用程序:

 ... #nestedbg { background-position: left top; background-image: url(); background-repeat: repeat-x; background-attachment: fixed; } ... 

当我运行rake assets:precompile然后运行rails s -e production ,一切都按预期工作。 但是,当我删除预编译资产并在开发中运行rails s ,CSS文件如上所示出现而不是被正确替换。

我尝试在/config/environments/development.rb放置config.assets.compile = true ,但没有帮助。

有任何想法吗? 谢谢。

老实说,我不能说为什么在你的情况下没有正确解释,但我有一个更好的解决方法提供:完全跳过erb解释。

你可以这样做:

 /* styles.css.scss */ background-image:url(image_path("siteheader2.png")); 

如果你没有机会我也建议看看SASS :它集成在Rails资产管道中,让你做一些很酷的事情,如变量声明,嵌套,mixins,……

我发现除非还添加了SCSS处理,否则ERB不会处理我的css文件。

我将screen.css.erb更改为screen.css.scss.erb ,现在<%= asset_path 'file.png' %>正确呈现为/assets/file.png

我在Rails 3.1.3上。

我使用的是Rails 3.1.1,当我将应用程序切换到使用Rails 3.1.3时,问题就消失了。 我切换回3.1.1,看看问题是否回来了,但事实并非如此。

我猜这是一个gem的问题,3.1.3的更新带来了其他gem更新。

奇怪的是,我发现将asset_path更改为asset_data_uri然后返回asset_path对我asset_path 。 一直使用Rails 3.1.3。

奇怪。

Sam Oliver的建议对我有用,只是重命名扩展没有更新文件的时间戳。

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中加以强调):图像,字体,video,音频,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指南资产管道

标题:分别为2.2.1和2.2.2。