【发布时间】:2014-06-04 10:32:35
【问题描述】:
我有一个带有小部件的 Rails 引擎。我在渲染中使用layout: false 属性渲染小部件并设置小部件的样式,我正在我的主应用程序上回收 CSS。
现在是棘手的部分,我的小部件只需要 3 个样式表,其中 2 个在我的主应用程序中,它们是 bootstrap.css 和 _ss_font.css。在开发中,它工作正常,但是当我将它推向生产时,我在 bootstrap.css 上遇到错误,它似乎依赖于我的供应商资产上的另一个文件。如何包含这些资产?
注意:如果我使用=stylesheet_link_tag "application",我的问题将部分解决,但我必须处理冲突的类名,它将包括我的应用程序中的所有资产。我只想加载必要的样式表以在引擎中设置小部件的样式。
编辑 1
正如建议的那样,我将对此进行更具描述性的解释:
这就是我遇到的错误。
ActionView::Template::Error(未找到要导入的文件或无法读取: ss 变量。加载路径: /data/serviceseeking_au_staging/releases/20140604114806(在 /data/serviceseeking_au_staging/releases/20140604114806/vendor/assets/stylesheets/bootstrap.scss)):
2: !!! 5 3: %html 4: %head 5: = stylesheet_link_tag "bootstrap", "_ss_font", "feedback/reviews-widget" 6: 7: %body 8: .reviews-container lib/action_logger.rb:31:in `call'
这个视图在引擎内部。如您所见,这是我的理想目标,只包含 3 个样式表。 reviews-widget 上没什么可看的,它只是没有任何外部文件依赖的 sass,所以我不会展示它。那么查看错误消息,这个“ss-variable”在哪里?好吧,在我们到达那里之前,让我先带你们去实地考察一下。
我首先追踪bootstrap.scss 的位置,发现它位于vendor/assets/stylesheets 文件夹下的主应用程序中。其内容如下:
@import "bootstrap/variables";
@import "bootstrap/mixins";
@import "bootstrap/scaffolding";
@import "bootstrap/grid";
@import "bootstrap/layouts";
etcetera...
所以通过跟踪 boostrap.scss 并打开它,我看到它正在导入一个名为 _variables.scss 的部分,等等,这里是 _variable.scss
@import "ss-variables";
// Grays
// -------------------------
$black: #000 !default;
$grayDarker: #222 !default;
(注意:我在 _variables.ss 所在的/vendor/assets/stylesheets/bootstrap 中看到了另一个 boostrap.scss)啊哈!有那个小怪胎,“ss-variable”!!我们正在接近这场疯狂的部分追逐。所以我搜索了ss-variables.scss 的位置,并在我的主应用程序的lib/assets/stylesheets/ 上找到了它,它包含更多的scss 变量。
因此跟踪它们,我提出了这个假设,即当尝试在我的引擎上使用 stylesheet_link_tag 包含 bootstrap 时,引擎看不到位于主应用程序上的依赖文件。
奖励:我有一种非凡的感觉,在此之后,_ss_font css 将是下一个。但这是另一个故事。谢谢。
【问题讨论】:
标签: ruby-on-rails asset-pipeline rails-engines