Как заставить Rails 3.1 использовать SASS (над SCSS) по умолчанию?

Нелегко выяснить, как сделать SASS, а не SCSS, по умолчанию для таблиц стилей.

Я пробовал сделать файл sass_config.rb с этим:

Sass::Plugin.options[:syntax] = :sass
Sass::Plugin.options[:style] = :compressed

Я также попытался добавить это в файл environment.rb. В любом случае я получаю эту ошибку:

.../config/environment.rb:7:in `<top (required)>': 
  uninitialized constant Sass::Plugin (NameError)

Ответ 1

Для рельсов 3.1.rc4 вы можете установить конфигурацию:

config.sass.preferred_syntax = :sass

в файле application.rb

Ответ 2

Я добавил следующее в config/environments/development.rb:

config.sass.preferred_syntax = :sass

Это сделал трюк.

Ответ 3

Сделайте require 'sass/plugin' и убедитесь, что он внизу после вашего вызова Application.initialize!.

Ответ 4

Я определенно предпочитаю sass scss тоже - вы считали, что используете только драгоценный камень компаса для всех ваших CSS и добавляете preferred_syntax = :sass в конфигурацию /compass.rb

Я еще не тестировал это на rails 3.1, но он работает в версии 3.0.7

ИЗМЕНИТЬ

Как шаг устранения неполадок, что происходит, когда вы удаляете только первую строку кода из sass_config.rb, чтобы она имела только вторую? Вызывают ли обе эти строки ошибку?

Ответ 5

Как прокомментировал @krainboltgreene, добавив следующую строку в config/application.rb

config.generators.stylesheet_engine = :sass

делает sass формат по умолчанию для генераторов таблиц стилей. Однако, поскольку Rails 3.1.beta1 не поддерживает его, появляется следующее сообщение об ошибке

$ rails g scaffold user name:string
...
Could not find "scaffold.css.sass" in any of your source paths. Your current source paths are:
.../gems/railties-3.1.0.beta1/lib/rails/generators/rails/scaffold/templates
...

$ rails g controller users
...
Could not find "stylesheet.css.sass" in any of your source paths. Your current source paths are: 
.../gems/railties-3.1.0.beta1/lib/rails/generators/rails/assets/templates

Как вы видите, нельзя изменить формат по умолчанию, не разбивая генераторы. Вместо этого вы можете вручную создавать дополнительные файлы *.css.sass, которые отлично работают с или без scss.

Ответ 6

Я нашел этот ответ где-то в другом месте, не могу точно запомнить, но поставьте его в config/initializers/sass.rb:

Sass::Engine::DEFAULT_OPTIONS[:load_paths].tap do |load_paths|
  load_paths << "#{Rails.root}/app/assets/stylesheets"
  load_paths << "#{Gem.loaded_specs['compass'].full_gem_path}/frameworks/compass/stylesheets"
end

Я также предпочитаю синтаксис SASS (для SCSS). Все, что вам нужно сделать, это файлы имен mystylesheet.css.sass вместо этого, и это просто работает. Вы можете даже переименовать свой application.css в application.css.sass, изменить комментарии вверху на // вместо /* */ и использовать директивы require_* — все это работает, а затем вы можете использовать SASS в своем приложении global таблицы стилей. Это не будет, если вы используете компас в app/stylesheets.

Не требуется Sass::Plugin, он полностью отделен от нового механизма движков Rails, который основан на Sprockets. Он уже знает, как скомпилировать SASS для вас и правильно управлять комплектом активов.

Я предполагаю, что новый выпуск Compass сделает это автоматически для проектов Rails 3.1+, используя конвейер активов.