Rails 3.0.9.
在宝石文件中:
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'
...
我希望每当我更新.sass
文件时,guard-livereload
都能正常工作。
请注意,指南针通常工作正常。页面刷新后,将从 SASS 文件生成新的 CSS。
这是因为guard-sass
将 SASS 导入路径硬编码到当前目录的子目录(请参阅最新版本 0.6.0 中的 https://github.com/hawx/guard-sass/blob/ac65c06fb0ea237713197730196d30ac47840bbf/lib/guard/sass.rb#L20),因此从 Compass 导入 SASS 是不可能的(指南针路径不在 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 3.0.9 项目上安装了 guard-sass,遇到了同样的问题。帕维尔提供的答案对我没有帮助。然后,我意识到我不需要在开发服务器上使用 guard,我只需要确保在处理样式和脚本时它已安装在我的本地机器上,这样我的 Sass 就会变成 CSS 然后压缩 CSS(Jammit)。
我所做的是将我的保护宝石隔离在我的宝石文件中的一组中,例如:
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 应用程序,并在另一个终端中进行保护。