【问题标题】:Sprockets::CircularDependencyError in manifest file using asset pipeline清单文件中的 Sprockets::CircularDependencyError 使用资产管道
【发布时间】:2014-10-31 21:51:07
【问题描述】:

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

当前错误消息:

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

我当前的 rails 版本是:4.1.5

还请提出解决方案,以拥有多个 javascript 清单文件。

提前致谢。

【问题讨论】:

    标签: ruby-on-rails asset-pipeline


    【解决方案1】:

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

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

    【讨论】:

    • 删除 require_tree 后出现以下错误,并且能够按照建议修复它:“资产已过滤,将不会被提供:将 Rails.application.config.assets.precompile += %w( admin_area.css ) 添加到 config/initializers/assets.rb 并重新启动您的服务器”-谢谢@MikDiet
    【解决方案2】:

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

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

    所以简而言之,rails 资产管道将您的所有 资产(如 css、js)预编译到单个文件中(一个文件用于所有 css 文件,一个 js 文件用于所有 js)。这样做页面的加载时间会显着减少,因为您的浏览器单独获取这些文件的请求更少。

    拥有多个清单文件:

    在某些情况下,例如您的情况,或者如果您使 您的应用程序与 并忽略你的其他风格

    要实现这一点,请按照以下步骤操作:

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

    b. 如果是 Production,您需要预编译您的资产,为此您必须添加您的个人文件

    #config/application.rb or config/environments/production.rb
    Rails.application.config.assets.precompile += ['admin_area.css', 'other.css', 'some_file.js'] 
    

    您的错误:

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

    你的错误清楚地表明你有一个循环依赖,这意味着你的一个文件正在尝试加载另一个文件的资源,而另一个文件正在尝试加载第一个文件的资源,从而产生循环依赖。正如@MikDiet 在他的回答中已经提到的那样,您在您的两个css 文件中都有require_tree .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 2011-11-19
      • 2013-02-26
      • 2012-02-07
      • 2014-08-28
      • 1970-01-01
      相关资源
      最近更新 更多