【发布时间】:2019-11-03 14:21:40
【问题描述】:
我在为我正在开发的新 Rails 6 应用程序预编译资产时遇到了一些问题。
我的application.scss 看起来像这样:
@import 'vars';
@import 'bootstrap';
@import 'bootstrap_overrides';
@import 'font_awesome5.css';
@import 'base';
@import 'dashboard';
# etc...
但是在使用 Capistrano 部署到生产环境时,资产预编译步骤会失败,并出现以下情况:
SassC::SyntaxError: Error: Undefined variable: "$padding"
on line 18:12 of app/assets/stylesheets/base.scss
>> padding: $padding;
-----------^
$padding 变量在vars.scss 中定义:
$padding: 60px 0px;
并且,如前所述,正在导入application.scss。如果application.scss 已经在导入它,为什么其他文件会抱怨它是必要的?
该应用在开发中运行良好。
提前致谢!
【问题讨论】:
-
我认为编译器会在将每个文件导入到 application.js 之前自行编译每个文件,因此在导入之前需要变量。所以它会抓取 base.scss 文件来解析它,但它还不知道 $padding 已经存在,所以它会抛出一个错误。 application.scss 上的
vars导入仅替换该文件上的变量,而不替换导入文件中的变量。 -
有完全相同的问题。在开发中工作,而不是在生产中(heroku)。到目前为止找到任何解决方案吗?
-
@thomas / DaniG2k 你们有没有搞清楚问题出在哪里?我正在经历同样的事情。谢谢!
-
@NathanBashaw 不幸的是我仍然有这个问题。如果您找到解决方案,请同时发布。我停止使用 scss 变量,因为对我来说它只是一个变量。
标签: ruby-on-rails sass capistrano asset-pipeline