2012-05-31 30 views
2

Rails 3.0.9。无法使指南针+警卫+ sass工作

在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-sassguard-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文件才能正常工作。

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

+0

尝试用'bundle exec'或使用我的gem'rubygems-bundler'作为前缀? – mpapis

+0

我正在运行一个zsh插件,它为每个rake/guard/etc添加前缀。如果找到Gemfile,则命令为“bundle exec”(https://github.com/pjg/dotfiles/blob/master/.zsh/bundler/bundler.plugin.zsh)。所以这里没有捆绑器问题:)我认为这是某种订购问题,即guard-sass在compass-rails有加载的机会之前加载。 –

回答

2

这是因为guard-sass会有限制进口SASS路径只在当前目录的子目录(见https://github.com/hawx/guard-sass/blob/ac65c06fb0ea237713197730196d30ac47840bbf/lib/guard/sass.rb#L20在0.6.0的最新版本),因此从指南针进口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+,其中上述内容不再需要。

+0

我试过了,现在我的服务器仍然拒绝启动。 :/ – jackyalcine

+1

我有Rails.root是零!错误以及最新的警卫和后卫... –

+0

非常感谢,Paweł!这对我来说是诀窍。即使我使用罗盘0.12.2,我也遇到了错误。 – medoingthings

0

我最近在我的Rails 3.0.9项目中安装了guard-sass,并且遇到了同样的问题。帕维尔提供的答案并没有帮助我。然后,我意识到,我不需要在我的开发服务器上使用警卫,我只需要确保它在我的本地机器上安装时,我正在处理样式和脚本,以便我的Sass将成为CSS,然后压缩CSS (Jammit)。

我做什么是我的隔离护的宝石一组在我的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应用程序和保护。

+0

这可能是解决这个问题的正确方法。我一定会检查出来。 –