sass-rails资产管道:错误地生成图像路径; `url(/images/blah.png)`而不是`url(/assets/blah.png)`

cha*_*doh 17 ruby-on-rails sass asset-pipeline compass-sass

第2.2.2节"CSS和Sass"中,我被告知放入image-url('delete.png')我的sass.所以我有.

但是,它正在生成CSS

background-image: url(/images/delete.png)
Run Code Online (Sandbox Code Playgroud)

而不是我告诉他应该生成的东西,正确而明显的东西,

background-image: url(/assets/delete.png)
Run Code Online (Sandbox Code Playgroud)

什么.哎呀.

我花了很多天试图弄清楚这是从哪里来的.

以下是导致此行为的相关设置的要点.以下是我们的代码库早期版本中相同文件的要点(在我们实施资产管道之后,它实际上工作了大约一周才出现这种令人沮丧的行为).你能发现差异吗?你能想到的任何其他文件可能会导致这种情况吗?

注意

  • 我们故意使用较旧版本,sass-rails因为较新版本Stack level too deep!在预编译时会导致错误.
  • 我们正在使用Compass.

两次针对变通办法的黑客尝试

因为实际上对资产管道进行故障排除有点糟糕.

1:将图像放入/图像

我试图将所有图像移动到public/images并将其添加为加载路径.这在dev中工作(图像可以在任何一个/assets或者访问/images),但是生产的预编译/assets仅将指纹图像放入(obvs)中,因此当sass-rails放入时url(/imagse/delete-120398471029384102364.png),它无法找到.

2:使/ public/images成为/ public/assets的符号链接

这可能适用于生产,但在开发中,/ assets文件夹不存在,因此url(/images/delete.png)指令会导致图像不均匀.

emr*_*ass 10

如果你还没有这个,请命名你的css文件*.css.scss(而不是.sass- 如果你这样做,你可能需要调整一些语句的语法).然后使用image_path帮助器代替image-path,例如:

background-image:url(image_path('delete.png'));
Run Code Online (Sandbox Code Playgroud)

我希望这能解决你的问题.如果没有,这种方法为您生成的资产路径是什么?


ava*_*tok 8

这看起来是由于您的sass-rails版本(3.1.0).我可以重现你的问题(感谢发布Gemfile),当它碰到sass-rails 3.1.4时就会消失.

尝试升级到3.1.4并清除tmp/cache.还要确保您没有点击任何浏览器缓存.

我知道你说3.1.4引起了其他问题...你试过更高版本吗?


Chr*_*ris 2

它确实看起来像这个问题: https: //github.com/rails/sass-rails/issues/57 如果是这样,你应该尝试找到 Compass 和 Sass-rails 之间版本的良好组合。

也许将所有内容(包括 Rails)升级到最新版本,这仍然是最好的方法(使用bundle outdated捆绑器 1.2 中的命令来知道要升级哪些 Gems)

  • “尝试在 Compass 和 Sass-rails 之间找到良好的版本组合”。惊人的。我喜欢这样的解决方案。“放入两个随机版本,‘bundle update’、‘rake tmp:cache:clear’,然后按 Shift 键刷新浏览器。” 这就是我在询问之前所做的事情。太糟糕了。 (2认同)