【问题标题】:Rails: assets not precompiling on Capistrano deploy step due to missing variablesRails:由于缺少变量,资产未在 Capistrano 部署步骤上预编译
【发布时间】: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


【解决方案1】:

编辑:vmarquet 在回答类似问题时给出了更好的答案。 https://stackoverflow.com/a/62238810/4493692

总结 vmarquet 的回答,最新版本的 sprockets 默认将 assets/stylesheets 中的所有 scss 文件编译为顶级资产。您想要的是编译您的 application.scss 文件,而不是独立编译所有部分和导入。

这是在 manifest.js 中配置的。而不是默认目录包含,你会想要这样的东西:

//= link_tree ../images
//= link application.css
//= link application.js

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2012-02-19
    • 2019-11-21
    • 2015-01-28
    相关资源
    最近更新 更多