【问题标题】:How to make Rails 3.1 use SASS (Over SCSS) as the default?如何让 Rails 3.1 默认使用 SASS (Over SCSS)?
【发布时间】: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)

【问题讨论】:

    标签: ruby-on-rails ruby sass ruby-on-rails-3.1


    【解决方案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+ 项目执行此操作。

        【讨论】:

          猜你喜欢
          • 2019-07-27
          • 1970-01-01
          • 1970-01-01
          • 2014-09-27
          • 2012-08-08
          • 1970-01-01
          • 2022-06-16
          • 1970-01-01
          • 2021-06-04
          相关资源
          最近更新 更多