2012-05-31 2 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-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.

+0

попробовал префикс с 'bundle exec' или с помощью моего gem' rubygems-bundler'? – mpapis

+0

Я запускаю zsh-аддон, который префиксы каждого rake/guard/etc. команду с «bundle exec», если найден Gemfile (https://github.com/pjg/dotfiles/blob/master/.zsh/bundler/bundler.plugin.zsh). Так что проблем с путчером здесь нет :) Я думаю, что это какая-то проблема упорядочивания, т. Е. Охранник загружается, прежде чем компас-рельсы могут быть загружены. –

ответ

2

Это происходит потому, что guard-sass жёстко SASS импорт путь только в подкаталоги текущего каталога (см https://github.com/hawx/guard-sass/blob/ac65c06fb0ea237713197730196d30ac47840bbf/lib/guard/sass.rb#L20 в последней версии 0.6.0), таким образом, импортирующей 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 стал 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 

Тогда я могу начать мое приложение рельсов в окне терминала, и охранник в другом терминале.

+0

Это может быть правильный способ решения этого. Я обязательно проверю это. –

Смежные вопросы