我在3.2.1,sass-rails-3.2.4和sass-3.1.15 ...
资产管道的文档说:
asset-url("rails.png", image) becomes url(/assets/rails.png)
image-url("rails.png") becomes url(/assets/rails.png)
...
所以我做了以下文件:
# app/assets/stylesheets/public/omg.css.sass
body
background: asset-url('snake.gif', image)
#lol
background: image-url('snake.gif')
当我访问localhost:3000 / assets / public / omg.css时,我得到:
body {
background: asset-url("snake.gif", image); }
#lol {
background: image-url("snake.gif"); }
...我也尝试将文件更改为omg.css.scss并将语法更改为:
# app/assets/stylesheets/public/omg.css.scss
body {
background: asset-url('snake.gif', image);
}
#lol {
background: image-url('snake.gif');
}
但得到相同的结果......有没有人知道为什么这些助手不起作用?
答案 0 :(得分:33)
尽管文档说的是,但似乎rails 3.2.6中的默认选项允许您在CSS中使用更少的路径信息。
例如。 ../app/assets/images/rails.png
是example.css.scss文件中的引用,类似于:
background: white url(rails.png) repeat-y;
您不会将image-url
或asset-url
包含在您的scss中(据我所知),只是简单url(your_image.png)
。这些文档似乎只是对后台工作的解释。
答案 1 :(得分:11)
当我遇到这个问题时,那是因为我没有在资产管道中包含css文件以进行预编译。结果,它将在运行时生成。因为sass-rails gem通常位于:assets组中,所以在运行时生成css文件时助手不可用。
尝试将以下行添加到application.rb(或production.rb):
config.assets.precompile += %w( public/omg.css )
我在this post上找到了修复程序,包括在将文件添加到预编译器时命名文件的问题。
答案 2 :(得分:4)
您是否在application.rb
?
config.assets.enabled = true
通过将Sass样式表的扩展名设置为.css.scss
,您做得很好。这让Rails知道在用CSS发送内容之前先用Sass解析文件。
答案 3 :(得分:1)
您可能想尝试清除/ tmp / cache。我对Rails和Sass来说太新了,不知道为什么会这样,但是经过几个小时的搜索,它解决了我同样的问题。
顺便说一句,尽管事实上我可以看到其他Sass指令,例如设置变量和使用它们进行计算,但仍然可以执行。我确定有一个非常简单的解释,一旦我有时间追踪它。答案 4 :(得分:1)
我做了@Ryan建议的更改,以及升级sass-rails:
bundle update sass-rails
sass 3.2.6为我工作,而3.2.5没有。
答案 5 :(得分:0)
我们遇到了同样的问题并通过明确要求Gemfile中的sprockets来修复它(即使它是ActionPack的依赖项):
group :assets do
gem 'sprockets'
gem 'sass-rails', '~> 3.2.3'
# ...
end
我不知道为什么,但它现在有效。 ; - )
答案 6 :(得分:0)
我几天来一直在抨击我。对我有用的唯一解决方案如下:
如果不能解决问题,请将以下内容添加到config / initializers /中的新文件中,称为“horrible_sass_patch.rb”:
begin
require 'sass-rails'
rescue
end
if Class.const_defined? "Sass::Script::Functions"
module Sass::Script::Functions
# This function exists, but doesn't automatically register
declare :asset_url, [:value]
declare :image_url, [:value]
declare :font_url, [:value]
# ... etc
end
end
注意:这要求您使用“活动”Bundler加载机制,即您的application.rb使用以下内容:
Bundler.require *Rails.groups(:assets => %w(development test))
...如果您的样式表在供应商中,请确保它们包含在Sass的配置中:
if config.respond_to? :sass
config.sass.load_paths << Rails.root.join('vendor', 'assets', 'stylesheets')
end
答案 7 :(得分:-1)
您只需在路径中添加一个向前的斜杠/
,然后像往常一样使用url
。
background-image: url("/assets/rails.png")