我有一个Rails 3.1项目,资产管道运行良好。问题是我需要在Sass中引用图像,但是Rails会计算图像URL。(这在生产中尤为重要,Rails在生产中将图像的Git哈希值附加到其文件名中以将其添加到胸围缓存中。)
例如,在app/assets/stylesheets/todos.css.scss
:
.button.checkable { background-image: url(/assets/tick.png); }
当我部署(或运行rake assets:precompile
)时,文件app/assets/images/tick.png
将移至public/assets/tick-48fe85c0a.png
或类似位置。这会破坏CSS。这篇文章提出了两个建议:
- 不要将资产管道用于图像-而是将其放入
public/images/
并直接引用 - 在您的CSS中使用ERB,并让Rails计算出图像URL。
1号肯定是有可能的,尽管这意味着我的图像上没有缓存损坏。2号出局是因为我使用的是Sass,而不是ERB来处理文件。
使用资产管道时,必须重新编写资产路径,并且sass-rails为以下资产类别提供-url和-path帮助器(在Sass中连字符,在Ruby中强调):图像,字体,视频,音频,JavaScript和样式表。
image-url(“ rails.png”)返回url(/assets/rails.png)image-path(“ rails.png”)返回“ /assets/rails.png”
也可以使用更通用的形式:
asset-url(“ rails.png”)返回url(/assets/rails.png)asset-path(“ rails.png”)返回“ /assets/rails.png”