Ruby on rails SCSS文件中的Rails 3.1资源URL似乎没有正确引用资源

Ruby on rails SCSS文件中的Rails 3.1资源URL似乎没有正确引用资源,ruby-on-rails,ruby-on-rails-3.1,sass,asset-pipeline,Ruby On Rails,Ruby On Rails 3.1,Sass,Asset Pipeline,我刚从Rails 3.0升级到Rails 3.1 我有一个引用图像的foo.css.scss文件(/app/assets/images/foo.png),如下所示: .foo { background-image: image-url('foo.png'); } 问题是我的foo.png文件没有加载,我在日志中看到404个错误。 生成的实际css条目是: background-image: url(/images/foo.png); 这是错误的(?),因为图像可以在/assets/foo

我刚从Rails 3.0升级到Rails 3.1

我有一个引用图像的
foo.css.scss
文件(
/app/assets/images/foo.png
),如下所示:

.foo {
  background-image: image-url('foo.png');
}
问题是我的
foo.png
文件没有加载,我在日志中看到404个错误。 生成的实际css条目是:

background-image: url(/images/foo.png);
这是错误的(?),因为图像可以在
/assets/foo.png
中找到,而不是在
/images/foo.png
中找到

请注意,我仍在使用
开发
模式

另一个重要的注意事项。如果我将我的
foo.css.scss
文件重命名为
foo.css.erb
并使用:

background-image: url(<%= image_path('foo.png') %>);
这有什么区别吗?

您可以尝试:

.foo {
  background: url("/assets/foo.png")
}
应该行得通。希望有帮助:)

试试看

.classname{
  background: url(asset_path('/assets/image.png'))
}

我尝试过各种解决办法。最优雅的是:

.foo {
   background-image: url('foo.png')
}

SCSS编译器自动将其转换为
url('/assets/foo.png')

更重要的问题出现了,但一个简单的修复方法是将图像url更改为asset-url@Yule根据你的建议,我使用了
asseturl('foo.png',image)
,但我有同样的错误。一般的url是
/images/foo.png
您使用的是什么版本的sass rails?应用程序中是否有
config.assets.enabled=true
config.assets.version='1.0'
。rb@Yulesass rails版本:3.1.0..'“是”对于版本和启用标志,如果找不到/images/foo.png,则应仅获取/images/foo.png。这可能是像css中的内容和文件路径之间的大小写不匹配这样愚蠢的事情吗。当我转入生产时,这是否有效?另外,根据sass-rails的文档,image-url方法应该自动完成这项工作。问题是为什么图像url方法不能按预期工作。我在回答中写道,
图像url
不起作用。是的,肯定。将对其进行编译,并为同一图像生成指纹文件。您可以在“public”目录中找到它。您的答案暂时会有用,但您必须删除
图像url
版本,因为正如我在问题中所说的,它不起作用。不过,我需要理解为什么在使用带有
/assets/
前缀的
url
之前,
图像url
不起作用。此链接可能会帮助您解决问题-这是不正确的,因为它会在生产中中断。我认为它确实适用于Rails3.1,但肯定会与Rails4.0决裂。您需要更正您的答案
url(asset_path('/assets/foo.ng',image))
.foo {
  background-image: asset-url('sub_dir/foo.png', asset);
}
.foo {
  background-image: asset-url('sub_dir/foo.png', asset);
}