Rails 少/sass 冲突

Posted

技术标签:

【中文标题】Rails 少/sass 冲突【英文标题】:Rails less/sass conflict 【发布时间】:2016-03-30 10:37:19 【问题描述】:

我有一个基于 LESS 的 Rails 应用程序。 因为我添加了summernote html editor,所以我还必须在我的项目中添加 SASS 代码。 所以我添加了这些行:

宝石文件:

gem 'font-awesome-rails'
gem 'summernote-rails'
gem 'bootstrap-sass'

application.css:

*= require font-awesome
*= require summernote

在本地一切正常。 当我将应用程序提交到 heroku 时,我收到以下错误:

Sass::SyntaxError: Undefined variable: "$alert-padding".
   (in /tmp/build_xxx/vendor/bundle/ruby/2.1.0/gems/bootstrap-sass-3.3.1.0/assets/stylesheets/bootstrap/_alerts.scss:10)

我想我错过了 SASS 变量,但不知道如何在不与 LESS 代码产生任何冲突的情况下添加它们。

============= 编辑 ================== 预编译在它找到的第一个 sass 变量上被破坏,在文件 /gems/bootstrap-sass-3.3.1.0/assets/stylesheets/bootstrap/_alerts.scss 中:

.alert 
  padding: $alert-padding;

我假设预编译器没有声明任何 SASS 变量,并且在它找到任何变量的第一个地方就无法预编译。

============= 编辑 ================== 我添加到我的application.scss @import 我知道我需要拥有,现在看起来像这样:

@import "bootstrap-sprockets";
@import "bootstrap/variables";
@import "bootstrap/mixins";
@import "bootstrap";
/*
 * This is a manifest file that'll be compiled into application.css, which will include all the files
 * listed below.
 *
 * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
 * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
 *
 * You're free to add application-wide styles to this file and they'll appear at the top of the
 * compiled file, but it's generally better to create a new file per style scope.
 *
 *= require_self
 *= require custom_bootstrap/custom_bootstrap
 *= require custom
 *= require social-share-button

 *= require bootstrap-datetimepicker

 *= require dataTables/jquery.dataTables
 *= require dataTables/src/demo_table_jui
 *= require pricing

 *= require jquery.fileupload-ui

 *= require font-awesome
 *= require social-buttons-3.css

 *= require summernote
 */

我肯定包含了_variables.scss(为了确定,我重命名了它),我看到声明了$alert-padding

$alert-padding:               15px !default;
$alert-border-radius:         $border-radius-base !default;
$alert-link-font-weight:      bold !default;

我还是得到了这个错误!

PD - 我使用以下命令来检查本地预编译:

RAILS_ENV=development bundle exec rake assets:precompile

【问题讨论】:

【参考方案1】:

您可以找到安装说明here。

我至少看不到那些:

application.css 应该是 application.scss gem 'sass-rails' 在您的 Gemfile 中 在您的application.scss 中相应并适当地使用import 语句

【讨论】:

我的 Gemfile 中已经有 gem 'sass-rails'。我将application.css 重命名为scss 扩展,但我不知道如何将其内容转换为具有sass 样式(即@import 而不是*= require)。我认识到我的问题是没有包含 sass 变量,实际上预编译在它找到的第一个变量上被破坏了......但不知道如何包含它们的声明!

以上是关于Rails 少/sass 冲突的主要内容,如果未能解决你的问题,请参考以下文章

解决sass-loader和node-sass版本冲突问题(太难了)

解决sass-loader和node-sass版本冲突问题(太难了)

解决sass-loader和node-sass版本冲突问题(太难了)

Rails 中的验证冲突

如何处理列名('hash')与 Rails 冲突的旧数据库表?

如何解决 Rails 模型属性和 gem 名称冲突?