Как заставить 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)

person krainboltgreene    schedule 15.05.2011    source источник


Ответы (6)


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

config.sass.preferred_syntax = :sass

в файле application.rb

person Kevin    schedule 11.06.2011
comment
Если вы сделаете это, он не будет развернут в рабочей среде, потому что группа sass и :asset не активна для производственных сред. Вы получите метод sass, который не был найден вашим сценарием развертывания. Лично мне пришлось обойти это, изменив мой Gemfile, закомментировав часть group:assets, чтобы sass-rails, coffee-rails, uglifier gems загружались для всех конфигураций, а не только как часть группы assets, примерно так: # group :assets do gem 'sass-rails', ~› 3.1.0 gem 'coffee-rails', ~› 3.1.0 gem 'uglifier' # end - person Rob; 23.09.2011
comment
Я внес это изменение, но он по-прежнему использует scss по умолчанию в соответствии с rails g scaffold --help. Любые идеи? - person Explosion Pills; 18.07.2012
comment
Разве вы не можете просто rake assets:precompile перед запуском в производство? - person Seed; 18.12.2013

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

config.sass.preferred_syntax = :sass

Это помогло.

person remino    schedule 10.09.2012

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

person aceofspades    schedule 15.05.2011
comment
Только что понял, минут 5 назад. Другое решение состоит в том, чтобы иметь это требование в файле config/initializers/sass.rb. - person krainboltgreene; 15.05.2011
comment
При дальнейшем рассмотрении кажется, что SASS по-прежнему не устанавливает SASS по умолчанию для создания таблиц стилей. - person krainboltgreene; 15.05.2011
comment
Хорошо, реальное решение состоит в том, чтобы иметь это в вашем application.rb файле: config.generators.stylesheet_engine = :sass - person krainboltgreene; 15.05.2011
comment
Хотя это устраняет проблему возникновения ошибки, я все еще не могу установить параметр «стиль», чтобы он переносился в сгенерированную таблицу стилей. Строка стиля в вопросе работала для меня в 3.0.7, но не теперь в 3.1. Любые идеи? - person sevenseacat; 21.05.2011

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

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

РЕДАКТИРОВАТЬ

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

person stephenmurdoch    schedule 15.05.2011
comment
Я бы предпочел не использовать compass, если бы мог, я надеялся, что 3.1 решит необходимость использования Compass. - person krainboltgreene; 15.05.2011
comment
То же самое произойдет, если я удалю первую строку. Ошибка основана на том, если Sass::Plugin. - person krainboltgreene; 15.05.2011

Как прокомментировал @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, так и без них.

person Andrei    schedule 21.05.2011

Я нашел этот ответ где-то еще, точно не помню, но поместил это в 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 в глобальной таблице стилей вашего приложения. Не будет, если вы используете компас в app/stylesheets.

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

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

person sj26    schedule 07.06.2011