Rails 3 应用程序中的 Sass 导入错误 - “找不到或无法读取要导入的文件:指南针”

Posted

技术标签:

【中文标题】Rails 3 应用程序中的 Sass 导入错误 - “找不到或无法读取要导入的文件:指南针”【英文标题】:Sass import error in Rails 3 app - "File to import not found or unreadable: compass" 【发布时间】:2011-08-25 17:02:29 【问题描述】:

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

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

common.scss

$body-background: blue;

ma​​in.scss

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

body  
  background: $body-background; 

注释掉 @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: 

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

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"

我已经在谷歌上搜索了两天,但无法确定为什么我在使用基本的 @import 语句时遇到此问题。如何告诉 Sass 在哪里可以找到 Compass 和 Blueprint 库?

【问题讨论】:

【参考方案1】:

我收到了这个错误。

我将 application.rb 中的这一行更改为:

Bundler.require(:default, Rails.env) if defined?(Bundler)

到:

Bundler.require(*Rails.groups(:assets => %w(development test))) if defined?(Bundler)

另外,请确保文件名称为 something.css.sass 而不是 something.sass

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

【讨论】:

我今天创建了一个新的 Rails 3.2.8 项目,compass.rb 是问题所在。我没有更改 application.rb 中的任何内容。所以先删除compass.rb【参考方案2】:

我通过在我的 Gemfile 中切换到 compass-rails gem 而不是 compass gem 解决了这个问题(不要忘记重新启动服务器)。以防万一有人碰到这里。

【讨论】:

【参考方案3】:

我把头撞到它上面后修复了这个错误

我在 application.rb 中从以下位置评论了这一行:

Bundler.require(*Rails.groups(:assets => %w(development test))) if defined?(Bundler)

未注释:

Bundler.require(:default, :assets, Rails.env) if defined?(Bundler)    

我使用的是 Rails 3.2.11

【讨论】:

如果您添加了新环境,添加到%w(development test),例如%w(development test new_env_name) 应该足以加载资产。【参考方案4】:

好的,在了不起的 Chris Eppstein 的帮助下,我找到了有问题的线路。在config/environments.rb 我有这行:

Sass::Plugin.options[:template_location] = 
"#RAILS_ROOT/app/stylesheets" => "#RAILS_ROOT/public/stylesheets"

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

【讨论】:

【参考方案5】:

我通过从Gemfile 中的:assets 组中移出gem 'compass-rails', '~> 1.0.1' 在我的Rails 3.2.0 服务器上解决了这个问题,来自https://github.com/Compass/compass-rails/issues/19 中的提示。

【讨论】:

这对我在 Rails 3.2.13 和 compass-rails 1.0.3 上不起作用。【参考方案6】:

Sass 中的 @import 命令导入 .scss 或 .sass 文件,而不是 .css 文件。

安装过程中似乎遗漏了一些东西。 (也许compass install blueprint这行?)我按照这里的步骤操作: http://compass-style.org/reference/blueprint/ 并且无法重现问题。

【讨论】:

对,我正在尝试包含常规指南针和蓝图 (scss) 文件。上面的“指南针初始化”行安装蓝图。只是为了确认我再次运行了该命令——您可以在下面的输出中看到 compass 认为一切都已安装。 $ compass install blueprint 相同的 app/stylesheets/screen.scss 相同的 app/stylesheets/partials/_base.scss 相同的 app/stylesheets/print.scss 相同的 app/stylesheets/ie.scss 相同的 public/images /grid.png【参考方案7】:

我这样修复了这个错误:

在 application.rb 我有

Bundler.require(:default, Rails.env) if defined?(Bundler)  

改成

Bundler.require(:default, :assets, Rails.env) if defined?(Bundler)

这是在将项目从 3.0.3 更新到 3.2.13 之后

【讨论】:

以上是关于Rails 3 应用程序中的 Sass 导入错误 - “找不到或无法读取要导入的文件:指南针”的主要内容,如果未能解决你的问题,请参考以下文章

如何修复错误:Ruby on Rails 中的“Sass::SyntaxError in Posts#index”?

Rails 应用程序中的 Heroku/Zurb Foundation Sass SyntaxError

为 sass 修改导入文件时,rails 中不符合样式

预编译时的 Sass 未定义变量

Rails 上的 SASS 无效 CSS 错误

在 Rails 3.1 应用程序中使用 Sass + Compass + Blueprint