我在中找到了答案这个 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
并且找不到该文件。