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。