如何让 Rails 3.1 默认使用 SASS (Over SCSS)?
Posted
技术标签:
【中文标题】如何让 Rails 3.1 默认使用 SASS (Over SCSS)?【英文标题】:How to make Rails 3.1 use SASS (Over SCSS) as the default? 【发布时间】:2011-08-25 18:27:24 【问题描述】:很难弄清楚如何将 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】:对于 rails 3.1.rc4,您可以设置配置:
config.sass.preferred_syntax = :sass
在application.rb
文件中
【讨论】:
如果你这样做,它不会在生产环境中部署 b/c sass 和 :asset 组在生产环境中是无效的。你会得到一个没有被你的部署脚本抛出的 sass 方法。就个人而言,我最终不得不通过更改我的 Gemfile 来解决这个问题,注释掉“group :assets”部分,以便为所有配置加载 sass-rails、coffee-rails、uglifier gem,而不仅仅是作为资产的一部分组,像这样:# group :assets do gem 'sass-rails', " ~> 3.1.0" gem 'coffee-rails', " ~> 3.1.0" gem 'uglifier' # end 我做了这个更改,但根据rails g scaffold --help
,它仍然使用 scss 作为默认值。有什么想法吗?
您不能在投入生产之前先rake assets:precompile
吗?【参考方案2】:
我将以下内容添加到config/environments/development.rb
:
config.sass.preferred_syntax = :sass
成功了。
【讨论】:
【参考方案3】:执行require 'sass/plugin'
并确保在您调用Application.initialize!
后它位于底部。
【讨论】:
5 分钟前才发现这一点。另一种解决方案是在config/initializers/sass.rb
文件中添加该要求。
进一步研究,似乎仍然没有将 SASS 设置为样式表生成的默认值。
好的,真正的解决方案是在您的application.rb
文件中包含这个:config.generators.stylesheet_engine = :sass
虽然这解决了引发错误的问题,但我似乎仍然无法设置“样式”选项,以便将其传递到生成的样式表 - 问题中的样式行适用于我在 3.0.7,但不是现在在 3.1。有什么想法吗?【参考方案4】:
我也绝对更喜欢 sass 而不是 scss - 您是否考虑过为所有 CSS 使用 compass gem,并将 preferred_syntax = :sass
添加到 config/compass.rb
我尚未在 rails 3.1 上对此进行测试,但它在 3.0.7 中有效
编辑
作为故障排除步骤,当您从 sass_config.rb 中仅删除第一行代码以使其只有第二行时会发生什么?这两行是否都会导致错误?
【讨论】:
如果可以的话,我宁愿不使用compass
,我希望 3.1 能够解决使用 Compass 的需求。
如果我删除第一行,也会发生同样的事情。错误基于 if Sass::Plugin
。【参考方案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
,将顶部的 cmets 更改为 //
而不是 /* */
并使用 require_*
指令——一切正常,然后您可以在应用程序全局中使用 SASS样式表。如果您在app/stylesheets
中使用指南针,则不会。
不需要Sass::Plugin
,它完全独立于基于 Sprockets 的新 Rails 资产引擎。它已经知道如何为您编译 SASS 并正确管理资产捆绑。
我想新的 Compass 版本会自动为使用资产管道的 Rails 3.1+ 项目执行此操作。
【讨论】:
以上是关于如何让 Rails 3.1 默认使用 SASS (Over SCSS)?的主要内容,如果未能解决你的问题,请参考以下文章
Rails 3.1:我需要使用 CoffeeScript 吗?