如何让 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 指南针和链轮。使困惑

Rails 3.1:我需要使用 CoffeeScript 吗?

使用带有 bootstrap-sass gem 的 Rails 4 无法让 CSS 在 Heroku 上工作

如何在 Sass 中使用 Ruby/Rails 变量?

Rails 3.1 资产管道:如何加载特定于控制器的脚本?

rails使用bootstrap