【问题标题】:Cannot make compass + guard + sass to work无法使指南针+守卫+ sass工作
【发布时间】:2012-06-05 21:41:56
【问题描述】:

Rails 3.0.9。

在 Gemfile 中:

gem 'compass-rails' (1.0.1)
gem 'sass' (3.0.19)
...

group :development, :test do
  gem 'guard' (1.0.3)
  gem 'guard-sass' (0.6.0)
  ...
end

在此配置中,错误是:

ERROR: Sass > Syntax error: File to import not found or unreadable: compass.
              Load paths:
                /var/www/inbox/public
                /var/www/inbox/public/images
                /var/www/inbox/public/images/intro
                ...

(通常我可以看到缺少指南针的路径(即...ruby-1.9.3-p194-perf/gems/compass-0.12.1/frameworks/compass/stylesheets 不在那里),所以不知何故指南针没有被加载,我不知道该怎么做它加载。

当我将guard-sass 换成guard-compass 时,错误是:

ERROR: Rails.root is nil! (RuntimeError)
/home/jkl/.rvm/gems/ruby-1.9.3-p194-perf/gems/sass-3.1.19/lib/sass/util.rb:370:in `rails_root'
/home/jkl/.rvm/gems/ruby-1.9.3-p194-perf/gems/sass-3.1.19/lib/sass/plugin/rails.rb:11:in `default_options'
/home/jkl/.rvm/gems/ruby-1.9.3-p194-perf/gems/sass-3.1.19/lib/sass/plugin/configuration.rb:33:in `options'
/home/jkl/.rvm/gems/ruby-1.9.3-p194-perf/gems/sass-3.1.19/lib/sass/plugin/compiler.rb:38:in `initialize'
/home/jkl/.rvm/gems/ruby-1.9.3-p194-perf/gems/sass-3.1.19/lib/sass/plugin.rb:63:in `new'
/home/jkl/.rvm/gems/ruby-1.9.3-p194-perf/gems/sass-3.1.19/lib/sass/plugin.rb:63:in `compiler'
/home/jkl/.rvm/gems/ruby-1.9.3-p194-perf/gems/sass-3.1.19/lib/sass/plugin.rb:120:in `options'
...

我希望guard-livereload 在更新.sass 文件时能够正常工作。

请注意,通常指南针可以正常工作。在页面刷新时,新的 CSS 将从 SASS 文件中生成。

【问题讨论】:

  • 试过前缀 bundle exec 或使用我的 gem rubygems-bundler
  • 我正在运行一个 zsh 插件,它为每个 rake/guard/etc 加上前缀。如果找到 Gemfile (github.com/pjg/dotfiles/blob/master/.zsh/bundler/…),则使用“bundle exec”命令。所以这里没有捆绑器问题:) 我认为这是某种排序问题,即在 compass-rails 有机会加载之前加载了 guard-sass。

标签: ruby-on-rails ruby-on-rails-3 sass compass-sass guard


【解决方案1】:

我最近在我的 Rails 3.0.9 项目上安装了 guard-sass 并遇到了同样的问题。 Pawel 提供的答案对我没有帮助。然后,我意识到我不需要在我的开发服务器上使用guard,我只需要在我处理样式和脚本时确保它安装在我的本地机器上,这样我的Sass就会变成CSS然后压缩CSS (堵塞)。

我所做的是将我的守护宝石隔离在我的 Gemfile 中的一组中,例如:

group :guard do
  gem 'rb-fsevent',   :require => false if RUBY_PLATFORM =~ /darwin/i # Installs fsevent if on a Mac
  gem "sass",         "~> 3.2.1"
  gem 'guard-sass',   "~> 1.0.0"
  gem 'guard-jammit'
end

然后我可以在终端窗口中启动我的 rails 应用程序,并在另一个终端中保护。

【讨论】:

  • 这可能是解决这个问题的正确方法。我一定会去看看的。
【解决方案2】:

发生这种情况是因为guard-sass 将 SASS 导入路径硬编码到当前目录的子目录(请参阅最新版本 0.6.0 中的https://github.com/hawx/guard-sass/blob/ac65c06fb0ea237713197730196d30ac47840bbf/lib/guard/sass.rb#L20),因此从 Compass 导入 SASS 是不可能的(指南针路径不在萨斯)。

解决方法是覆盖:load_paths 设置。这是我的做法:

  guard 'sass', 
    :input => 'app/assets/stylesheets', 
    :output => 'public/stylesheets', 
    :load_paths => Dir.glob(File.join(Gem.dir, "gems", "compass*", "frameworks/blueprint/stylesheets")) + Dir.glob(File.join(Gem.dir, "gems", "compass*", "frameworks/compass/stylesheets"))

或者只是升级到 0.7+ 版本,以上不再需要。

【讨论】:

  • 我有 Rails.root 是零!错误以及最新的警卫和警卫sasss...
  • 非常感谢,Paweł!这对我有用。即使我使用的是 compass 0.12.2,我也遇到了错误。
猜你喜欢
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 2012-12-27
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多