开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜