2012-05-31 54 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

這可能是解決這個問題的正確方法。我一定會檢查出來。 –