Rails: 在测试环境中无法通过 SCSS @import 找到资产

Rails: Can't find assets via SCSS @import in test environment

我的团队正在 Rails 4 应用程序中使用 SitePrism 进行功能测试,我们目前正在重组项目中的 CSS 资产。其中一个资产文件包含一行 @imports from a subdirectory:

app/assets/stylesheets/lib/admin.scss.css:

   @import "base/base-admin";

和app/assets/stylesheets/lib/base/base-admin.scss依次包括:

   @import "shared/reset";
   @import "shared/colors";
   @import "shared/breakpoints";
   @import "shared/grids";

这在浏览器的开发中一切正常(我从 lib/admin.css 的请求中没有收到任何错误,并且我看到 CSS 规则已正确应用于页面)。

但是当我 运行 我们的功能测试时,我得到

Failure/Error: @page.load
ActionView::Template::Error:
  File to import not found or unreadable: base/base-admin.
  Load paths:
    /Users/duncanmalashock/ruby_projects/platform
    /Users/duncanmalashock/ruby_projects/platform/.bundle/gems/ruby/2.2.0/gems/bootstrap-sass-3.3.4.1/assets/stylesheets
 (in /Users/duncanmalashock/ruby_projects/platform/app/assets/stylesheets/lib/admin.scss.css)

但是,none 的其他资产在测试环境中损坏。为什么找不到这些?

这原来是一个命名错误。我清单上的后缀是“.scss.css”,而不是“.css.scss”(应该是正确的)。

Asset Pipeline 从最后一个后缀开始,并尝试 运行 匹配它的进程,然后用下一个后缀重复。

所以管道试图以错误的方式@import 文件(在 CSS 中有一个 @import 指令,在 SCSS 中也有不同的行为),这导致了意外行为。