在section 2.2.2, "CSS and Sass"中,我被告知将image-url('delete.png')
放入我的sass中。所以我有。
然而,它正在生成像
这样的CSSbackground-image: url(/images/delete.png)
而不是我告诉他应该生成的东西,正确而明显的东西,
background-image: url(/assets/delete.png)
什么。哎呀。
我花了很多天试图找出它的来源。
这是导致此行为的a gist of relevant settings。这是a gist of the same files in an earlier version of our code base(在我们实施资产管道之后,它实际上工作了大约一个星期才出现这种令人沮丧的行为)。你能发现差异吗?您能想到的任何其他文件可能会导致这种情况吗?
sass-rails
,因为较新版本在预编译时会导致Stack level too deep!
错误。因为实际上对资产管道进行故障排除有点糟糕。
我尝试将所有图片移至public/images
并将其添加为加载路径。这在dev中有效(图像可以在/assets
或/images
访问),但是生产的预编译只能将指纹图像放在/assets
中(obvs),所以当sass-rails放入时{ {1}},无法找到。
这可能适用于生产,但在开发中,/ assets文件夹不存在,因此url(/imagse/delete-120398471029384102364.png)
指令会导致图像不均匀。
答案 0 :(得分:10)
如果您还没有这个,请将您的css文件命名为*.css.scss
(而不是.sass
- 如果您这样做,则可能需要调整某些语句的语法)。然后使用image_path
帮助程序代替image-path
,例如:
background-image:url(image_path('delete.png'));
我希望这可以解决您的问题。如果没有,这种方法为您生成的资产路径是什么?
答案 1 :(得分:8)
这看起来是由于您的sass-rails版本(3.1.0)。我可以重现你的问题(感谢发布Gemfile),当它碰到sass-rails 3.1.4时就会消失。
尝试升级到3.1.4并清除tmp/cache
。另外,请确保您没有点击任何浏览器缓存。
我知道你说3.1.4引起了其他问题......你试过更高版本吗?
答案 2 :(得分:2)
看起来真的是这个问题:https://github.com/rails/sass-rails/issues/57 如果是这样,你应该尝试在Compass和Sass-rails之间找到良好的版本组合。
并且可能将所有内容(包括Rails)升级到最新版本,它仍然是最好的方法(在bundler 1.2中使用bundle outdated
命令来了解要升级的Gems)
答案 3 :(得分:2)
这是我们的haml-rails,指南针和sass-rails的组合。我们正在运行rails 3.2.6。 这对我们来说效果很好。
宝石'指南针',git:'git://github.com/chriseppstein/compass.git',参考:'3a4c5c75dca9f07f6edf2f0898a4626269e0ed62'
gem'haml-rails',git:'git://github.com/indirect/haml-rails.git',ref:'92c41db61f20a9f122de25bc73e5045cfccdbcd5'
宝石'sass-rails','〜> 3.2.5'
答案 4 :(得分:0)
不一定是解决方案,但肯定是一个可用的选项:如果你打开使用指南针spriting,你将减少http请求的数量,并能够用精灵地图手动指定你的图像路径,即'$ sprites:sprite-map(“PATH / * .png”);'
答案 5 :(得分:0)
完整性检查当前资产管道中的文件。检查它是否在此处列出的目录之一:
<%= debug Rails.application.config.assets.paths %>
接下来检查指南针希望找到图像的相对路径(并查看它是否匹配。根据Compass config docs,其中一个应告诉您:
<%= debug config.compass.http_images_path %>
<%= debug config.compass.http_generated_images_path %>
我猜它是第一个。无论哪种方式,将它们的路径与图像的asset_path进行比较:
<%= debug asset_path 'delete.png' %>
如果路径不匹配,可能需要将环境配置(development.rb,...)中的路径调整为此,例如:
config.compass.http_images_path = '/assets.
或者,您可以将图像移动到http_images_path或http_generated_images_path期望找到的位置。
此时,asset_path / asset_url(比硬编码要脆得多)应该可行。我的基础是我在样式表中看到的similar technique,
答案 6 :(得分:0)
对我来说,
将image_path
更改为image-path
适用于.scss
。后来,我再次更改为image_path
,现在工作正常。
删除缓存并没有帮助我。
答案 7 :(得分:-2)
在我编辑.scss文件(添加空格)并重新加载页面后,我得到了正确的结果。删除空间后,它正常工作。