Rails 3应用程序中的Sass导入错误 - "导入未找到或不可读的文件:指南针"

Eri*_*ght 24 ruby-on-rails sass blueprint-css ruby-on-rails-3 compass-sass

我有一个Rails 3应用程序,我成功运行compass init rails ./ --using blueprint.我可以@import从/ stylesheets目录中找到文件,但是当我尝试时出现错误@import compass.

现在该应用程序有两个简单的sass文件:

common.scss

$body-background: blue;
Run Code Online (Sandbox Code Playgroud)

main.scss

@import "common";
//@import "compass";

body { 
  background: $body-background; 
}
Run Code Online (Sandbox Code Playgroud)

随着这@import "compass"条线的注释,这个工作 - 我得到一个蓝色的背景,所以我知道Sass正在工作.

如果我取消注释该行,并尝试导入compassblueprint其他任何东西,我会收到这样的错误.

Syntax error: File to import not found or unreadable: compass.
              Load paths:

                /Users/eric/path/to/myrailsapp/app/stylesheets
        on line 2 of /Users/eric/path/to/myrailsapp/app/stylesheets/main.scss

1: @import "common";
2: @import "compass";
3: 
4: body { 
5:  background: $body-background; 
6: }
Run Code Online (Sandbox Code Playgroud)

也许我必须明确地告诉Sass在哪里找到Compass宝石,所以我add_import_path在config/compass.rb中添加了一行:

require 'compass'
require 'html5-boilerplate'

project_type = :rails
project_path = RAILS_ROOT if defined?(RAILS_ROOT)
add_import_path "/Library/Ruby/Gems/1.8/gems/"  # unfortunately this has no effect

http_path = "/"
css_dir = "public/stylesheets"
sass_dir = "app/stylesheets"
images_dir = "public/images"
javascripts_dir = "public/javascripts"
cache_dir = "tmp/sass-cache"

http_images_path = "/images"
http_stylesheets_path = "/stylesheets"
http_javascripts_path = "/javascripts"
Run Code Online (Sandbox Code Playgroud)

我一直在谷歌搜索两天,无法确定为什么我的基本@import陈述有这个问题.如何告诉Sass在何处找到Compass和Blueprint库?

Jon*_*man 21

我收到了这个错误.

我在application.rb中改变了这一行:

Bundler.require(:default, Rails.env) if defined?(Bundler)
Run Code Online (Sandbox Code Playgroud)

至:

Bundler.require(*Rails.groups(:assets => %w(development test))) if defined?(Bundler)
Run Code Online (Sandbox Code Playgroud)

另外,确保文件名为something.css.sass NOT something.sass

另外一件事,我的配置目录中有一个旧的compass.rb文件,这在Rails 3.2中是不需要的.删除它也为我解决了这个问题.


Jas*_*nis 9

我通过在我的Gemfile中切换到compass-railsgem而不是gem 修复了这个问题compass(不要忘记重新启动你的服务器).以防有人可能会遇到这里.


Abh*_*sak 5

我敲了敲头后修好了这个错误

我在我的application.rb中评论了这一行:

Bundler.require(*Rails.groups(:assets => %w(development test))) if defined?(Bundler)
Run Code Online (Sandbox Code Playgroud)

并且没有注释:

Bundler.require(:default, :assets, Rails.env) if defined?(Bundler)    
Run Code Online (Sandbox Code Playgroud)

我正在使用Rails 3.2.11


Eri*_*ght 4

好吧,在令人惊叹的克里斯·爱普斯坦(Chris Eppstein)的帮助下,我找到了有问题的台词。在config/environments.rb我有这一行:

Sass::Plugin.options[:template_location] = {
"#{RAILS_ROOT}/app/stylesheets" => "#{RAILS_ROOT}/public/stylesheets"
}
Run Code Online (Sandbox Code Playgroud)

对于当前版本的 Rails(我有 3.0.7)和 Compass(0.11.1),这条线是不必要的。我在遵循教程后添加了它。如果 sass 找不到指南针,可能是因为这条线弄乱了你的Sass::Plugin.options[:template_location].