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

时间:2011-11-22 17:04:43

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 asset-pipeline

我在/app/assets/stylesheets/styles.css.erb

中有以下Rails应用程序
...
#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,但没有帮助。

有什么想法吗? 感谢。

6 个答案:

答案 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。