使用资产管道清单文件中的Sprockets :: CircularDependencyError

时间:2014-09-07 14:38:11

标签: ruby-on-rails asset-pipeline

我正在尝试使用资产管道,并希望拥有多个清单文件。目前我有application.css清单文件和admin_area.css清单文件。其中一个堆栈答案建议删除application.css清单,但它不会解决我的意图。

当前错误消息:

验证#spanboard中的

Sprockets :: CircularDependencyError 已经需要projectfolder / app / assets / stylesheets / admin_area.css

我目前的rails版本是:4.1.5

还请建议解决方案,以获得多个javascript清单文件。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果你的两个清单中都有require_tree .指令 - 其中一个试图要求另一个清单,另一个会先尝试要求,这会导致循环错误。

相反,您应明确要求清单中的资产。

答案 1 :(得分:0)

Manifest file: 如果您查看docs,就会说

  

Sprockets使用清单文件来确定要包含和提供的资产。这些清单文件包含指令 - 指示Sprockets为了构建单个CSS或JavaScript文件而需要哪些文件

所以在简短的rails资产管道中预编译你的所有资产,比如单个文件中的css,js(所有css文件都有一个文件,所有js都有一个js文件)。通过这样做,页面的加载时间显着缩短,因为您的浏览器减少了单独获取这些文件的请求。

拥有多个清单文件:

在某些情况下,例如你的你的应用程序与< = IE8兼容,那么你可能想拥有多个清单文件,因为IE只允许你的一些固定大小的文件样式并忽略您的其他样式

要实现此目的,请执行以下步骤:

一个。 从您的application.css文件中删除require_tree。 ,因为它需要app / assets / stylesheets中存在的所有样式,因此您应该要求每个文件单独。

如果Production您需要预编译资产 ,那么您必须通过

添加单个文件
#config/application.rb or config/environments/production.rb
Rails.application.config.assets.precompile += ['admin_area.css', 'other.css', 'some_file.js'] 

您的错误:

  验证中的

Sprockets :: CircularDependencyError#dashboard projectfolder / app / assets / stylesheets / admin_area.css已被要求

您的错误清楚地表明您有一个循环依赖,意味着您的某个文件正在尝试加载其他资源,而另一个正在尝试加载第一个创建循环依赖的资源 < / strong>即可。正如@MikDiet在他的回答中已经提到的那样, 在两个css文件中都有require_tree .