Sass @import 指令在 Rails 引擎中使用时无法在插件中找到资源

2023-11-29

我正在构建一个使用 zurb-foundation 样式表的 Rails 引擎,并且不断遇到相同的 Sass::Syntax 错误。这看起来很奇怪,因为我在 Rails 应用程序中遵循了相同的过程,并且第一次尝试就成功了。因此,我决定通过启动两个新的 Rails 项目(一个应用程序和一个引擎)来将问题归零,并通过最少的设置将它们配置为使用基础。

我从 2 个干净的 Rails 3.2.9 项目开始——一个应用程序和一个engine --full并通过添加 Foundation_and_overrides.scss 和require- 在 CSS 清单中添加它。

然后我创建了一个简单的控制器,这样我就可以加载一个页面。对于应用程序,加载该页面并查看页面源代码,我可以看到基础 CSS 已正确编译并加载。

当我对引擎尝试同样的操作时,出现以下错误:

Sass::SyntaxError in Main#index

Showing /<PLUGIN_PATH>/test/dummy/app/views/layouts/application.html.erb where line #5 raised:

File to import not found or unreadable: foundation/common/ratios.
Load path: /<PLUGIN_PATH>/test/dummy
  (in /<PLUGIN_PATH>/app/assets/stylesheets/example_plugin/foundation_and_overrides.scss)

(请注意,虚拟应用程序的 CSS 清单是require- 插件的 CSS 清单,即require-ing Foundation_and_overrides.scss。接线显然不是问题,因为错误是从 Foundation_and_overrides.scss 引发的)

我用 Ruby-1.9.3 的几个版本(我认为是 p125、194、p327)进行了尝试,得到了相同的结果。

当我将此行添加到 test/dummy/config/application.rb 时它仍然不起作用:

config.assets.paths << "#{Foundation::Engine.root}/scss"

即使该路径存在 Foundation/common/_ratios.scss 。

问题可能出在 Sass、Sprockets、Compass、Foundation 或 Rails 上,所以我不知道从这里该去哪里。

我将其报告为基金会的问题,但我不太相信这一点。

有没有人见过这个?


我在中找到了答案这个 Stackoverflow 问题

问题是 Rails 引擎的虚拟应用程序和常规 Rails 应用程序的 config/application.rb 文件略有不同。

在 Rails 应用程序中,您将在顶部看到以下代码:

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

但在引擎虚拟应用程序中,您会看到:

Bundler.require
require "<PLUGIN_NAME>"

在 Rails 应用程序中,第一个 Bundler.require 包含 Gemfile 中的所有组,但排除 :assets,除非 Rails.env 是 :development 或 :test 第二个 Bundler.require 包括 :default——即 Gemfile 中不属于组的任何内容——以及 :assets 和 :product、:development 或 :test

在虚拟应用程序中,这些都不是必需的,因为 1) 它不适合在生产中使用,2) 测试和开发通常具有类似的依赖关系要求。由于 :assets 组只是将依赖项应用于 :test 和 :development 的便捷方法,但不适用于 :products,因此在虚拟应用程序中它与 :default 相同。因此,在虚拟应用程序中,只需要 :default 即可。自从Bundler.require(警告:前方剧透)与Bundler.require(:default),虚拟应用程序仅使用Bundler.require。这意味着 Gemfile 中属于组的任何内容都将被忽略。

所以我遇到的问题是我从 Rails 应用程序 Gemfile 复制并粘贴到 Rails 虚拟应用程序 Gemfile 中,包括group :assets do...。我删除了group线路一切正常!

11 月 29 日晚些时候添加:

澄清一下,我看到的错误是因为 sass-rails 没有包含在内(因为它位于我的 Gemfile 中的 :assets 组中),所以我的资产不是被解析为 Sass,而是被解析为 CSS。自从@import对于 CSS 和 Sass 来说意味着不同的东西,无论解析 CSS 文件都使用不同的实现@import并且找不到该文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sass @import 指令在 Rails 引擎中使用时无法在插件中找到资源 的相关文章

随机推荐

  • 从 R 中的时间向量中每次减去 10 分钟?

    我有一列这样的时间 2 43 00 PM 2 43 01 PM 2 43 05 PM 2 43 06 PM 2 43 07 PM 我想转到每一行并从每一时间中减去 10 分钟 这样新列如下所示 2 33 00 PM 2 33 01 PM 2
  • std::is_assignable 和 std::pair

    正如所料 以下代码不编译 include
  • 用于取消选中所有其他复选框的复选框

    我正在尝试进行一些验证 以便 当任一 选择一个 or 选择B 被检查 未选择 自动取消选中 当选中 未选择 时 两者 选择一个 and 选择B 会自动取消选中 但是当我运行此代码时 单击任何复选框都会取消选中all3 个复选框 即窗口初始化
  • 选择(下拉)的背景图像在 Chrome 中不起作用

    我想使用图像作为选择 下拉菜单的背景 以下 CSS 在 Firefox 和 IE 中工作正常 但在 Chrome 中不行 main drop down loc width 506px height 30px border none back
  • 属性错误:使用 lambda 在 Spark sql python 上分割

    在 Spark SQL 中 我使用 Python 并且尝试处理以下 sql 的输出 RDD 这是推文列表 我需要分割单词并提取 但是当使用地图并尝试按空格分割时 我收到了下面提到的异常消息 words tw sqlContext sql S
  • 使用 Python 对 PDF 文档进行数字签名

    我正在尝试使用 Python 签署 PDF 文档 并发现了一个名为我的PDF签名者 它有很好的文档记录 但是我发现该文档有点令人困惑 我遇到的唯一问题是如何安装mypdfsigner模块运行代码来签署文档 文档本身提供了一个代码示例 但是虽
  • 准备好的sql语句中的Python整数列表

    我的问题有点像Python 字符串到 SQL IN 参数的列表但我有一个整数列表 我使用的Python代码是 ids 1000032 1000048 sql SELECT CompNo CompName CompType FROM Comp
  • 在python matplotlib中将不规则四边形转换为矩形

    我从视频中得到了这些数据 矩形的顶点 动物在矩形内追踪的点 由于图像变形 我的 矩形 不规则 我想转换数据以便将它们在 matplotlib 中绘制为矩形 有简单的方法吗 这是迷宫和追踪 我把它分解成五个四边形 您可以使用skimage t
  • Javascript NoGray 日历如果今天被阻止,则在选择的阻止日期后查找下一个可用日期

    我正在使用NoGray Calendar并有以下代码 my cal1 new ng Calendar input date date1 month month1 year year1 selected date new Date displ
  • 错误:无法打开显示::0 进行 Selenium 测试

    首先我收到以下错误 org openqa selenium firefox NotConnectedException Unable to connect to host 127 0 0 1 on port 7055 after 45000
  • 使用“struct S”或“S”作为类型名的区别

    C 语言中结构化类型的名称S ist struct S 在C 中也可以使用struct S作为类型名而不是S像往常一样 struct S struct S s1 also ok in C S s2 normal way in C 所以 假设
  • 使用 group by 进行条件聚合查询

    我有一个系统 用户从不同的公司登录 我正在尝试运行查询来查看每个公司的活跃用户数与用户总数 Users table userID companyID lastLogin 期望的输出 companyID totalCompanyUsers n
  • 如何在Python中检查数字的“密码”[重复]

    这个问题在这里已经有答案了 我已经设置了一个程序来更改 密码 我让它检查它是否至少有 8 个字符 包含大写字母和数字 如果不满足此条件 它会再次要求输入密码 除了检查号码之外 我一切正常 我想知道是否有人可以提供帮助 npwv 1 whil
  • JSTL 1.0 字符串函数

    我正在尝试使用一些字符串函数 例如修剪或concat使用 JSTL 我尝试了以下方法 我尝试添加但我最终遇到了错误 我认为这适用于其他 JSTL 版本 例如 1 2 或 1 1 我需要知道的是如何在 JSTL 1 0 中使用字符串函数 JS
  • 对嵌套列表进行排序

    给出的是一个嵌套列表 具有以下标记 遗憾的是目前无法更改 我想对此列表进行排序 以及按 a 标签标题排序的所有嵌套列表 第一个 div 未嵌套在 li 中 应该用于对 ul 同级进行排序 性能也很重要 因为这个列表很容易包含超过 100 个
  • Pygame 从全屏切换到正常不起作用

    我目前正在尝试设置从窗口模式和全屏模式切换的设置 但是进入全屏并尝试返回后 游戏错误非常奇怪并且粘在左上角 顺便提一句 显示宽度 1280 显示高度 720 elif Settings Menu True screen fill 0 0 0
  • jQuery:如何动态检测窗口宽度?

    我的页面上有一个滚动元素 使用 jScrollPane jQuery 插件 我想要完成的是一种通过检测浏览器窗口的宽度来关闭滚动窗口的方法 我正在做响应式布局 我希望当浏览器低于一定宽度时关闭此滚动功能 当我刷新页面时 我能够使其工作 但是
  • 在 while 循环内将对象添加到列表中

    我正在尝试循环一个列表 该列表内部有 4 个数组 每个数组有 7 个值 我正在循环列表 然后当我从列表中获取一个数组时 因为我知道有多少个值具有该数组 所以我分配每个数组索引 如下所示 personObject setName String
  • 如何正确编码完整的 http url 字符串?

    我从用户那里获得一个 url 字符串 并希望将其转换为合法的 http url http one two Three four five 应该变成 http one two Three four 20 Five 但是 URLEncoder
  • Sass @import 指令在 Rails 引擎中使用时无法在插件中找到资源

    我正在构建一个使用 zurb foundation 样式表的 Rails 引擎 并且不断遇到相同的 Sass Syntax 错误 这看起来很奇怪 因为我在 Rails 应用程序中遵循了相同的过程 并且第一次尝试就成功了 因此 我决定通过启动