How to make Rails 3.1 use SASS (Over SCSS) as the default?
Having a hard time figuring out how to make SASS, not SCSS, as the default for stylesheets.
I've tried making a sass_config.rb
file with this:
Sass::Plugin.options[:syntax] = :sass
Sass::Plugin.options[:style] = :compressed
I've also tried adding that to the environment.rb file. Either way I get this error:
.../config/environment.rb:7:in `<top (required)&g开发者_Python百科t;':
uninitialized constant Sass::Plugin (NameError)
For rails 3.1.rc4, you could set the config:
config.sass.preferred_syntax = :sass
in the application.rb
file
I added the following to config/environments/development.rb
:
config.sass.preferred_syntax = :sass
That did the trick.
Do require 'sass/plugin'
and make sure it's at the bottom after your Application.initialize!
call.
I definitely prefer sass to scss too - have you considered just using the compass gem for all your CSS, and adding preferred_syntax = :sass
to config/compass.rb
I haven't tested this out yet on rails 3.1 yet but it works in 3.0.7
EDIT
As a troubleshooting step, what happens when you remove just the first line of code from sass_config.rb so that it just has the second one? Do both these lines cause the error?
As @krainboltgreene commented, adding the following line to config/application.rb
config.generators.stylesheet_engine = :sass
makes sass
the default format for stylesheet generators. However, since Rails 3.1.beta1 doesn't support it, one gets the following error messages
$ 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
As you see, one cannot change the default format without breaking the generators. Instead, you can manually create extra *.css.sass files, which are working fine with or without scss ones.
I found this answer somewhere else, can't remember exactly, but put this in 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
I also prefer SASS syntax (to SCSS). All you have to do is name files mystylesheet.css.sass
instead and it just works. You can even rename your application.css
to application.css.sass
, change the comments at the top to //
instead of /* */
and use the require_*
directives—it all works, and then you can use SASS in your application global stylesheet. It won't if you use compass in app/stylesheets
.
Don't require the Sass::Plugin
, it's totally separate to the new Rails asset engine which is based on Sprockets. It already knows how to compile SASS for you and manages the bundling of assets properly.
I imagine a new Compass release will do this automatically for Rails 3.1+ projects using the asset pipeline.
精彩评论