【问题标题】:javascript included twice in a Rails 3.1 asset-based appjavascript 在 Rails 3.1 基于资产的应用程序中包含两次
【发布时间】:2012-01-23 09:56:55
【问题描述】:

虽然问题的标题与之前的一些问题非常相似,但我的问题似乎有所不同。

简而言之,js manifest 中的第一项被包含两次。

这是我在 Rails 3.1 应用程序中的整个 /app/assets/javascript/application.js 文件:

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require autocomplete-rails
//= require utilities

这是渲染页面源代码的 sn-p:

<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/autocomplete-rails.js?body=1" type="text/javascript"></script>
<script src="/assets/utilities.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>

请注意,如果我将application.js 中的任何其他行移至顶部,如下所示:

//= require utilities
//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require autocomplete-rails

它总是第一个被包含两次!

<script src="/assets/utilities.js?body=1" type="text/javascript"></script>
<script src="/assets/utilities.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/autocomplete-rails.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>

更新

作为临时解决方法,我在列表顶部添加了//= require dummy,它指向一个空的 dummy.js 文件。尽管它在呈现的页面中出现了两次,但它没有任何效果,因为它什么都不做。另一方面,如果我像经常建议的那样在development.rb 中设置config.assets.debug = false,那么我的所有javascript 都会被加载两次:

<script src="/assets/application.js" type="text/javascript"></script>
<script src="/assets/application.js" type="text/javascript"></script>

并且js动作被触发两次(例如,删除模型时会弹出两次确认对话框)

朱塞佩

【问题讨论】:

  • 您是否有公共/资产中的文件?如果您确实删除它们,因为这可能会导致这种重复
  • 不,我开发的 /public 中没有资产目录
  • 您是否尝试过将 config/environments/development.rb config.assets.debug 更改为 false,想知道它在连接所有资产时是否做了“正确的事情”
  • 我确实尝试过,但它造成了严重破坏。请参阅原始问题的更新。谢谢

标签: javascript ruby-on-rails ruby-on-rails-3.1 asset-pipeline


【解决方案1】:

我之前遇到过类似的事情,我只是将第一个链接留空,它对我有用。试试看吧。

/*leave the following line empty */

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require autocomplete-rails
//= require utilities

【讨论】:

  • 不幸的是,没有,我试图挖掘依赖关系以及在哪里调用的内容,但这没有多大意义。问题是它有效
【解决方案2】:

原来罪魁祸首是rails-widgets 插件,尤其是this bit of code,它是小部件初始化的一部分。

删除后,一切恢复正常。 Javascript 资产现在按预期在开发和生产中加载一次。

虽然我很抱歉没有尽早发现问题是我的设置所特有的,但我仍然希望该解决方案可以起到一些作用。谢谢大家。

朱塞佩

【讨论】:

    【解决方案3】:

    看看这个:

    Rails 3.1 Assets - Strange Serving in Development

    您还应该检查您是否没有编译您的资产,即没有 public/assets 目录。如果有删除它,请退回您的服务器,您应该可以继续使用了。

    最终,这两种解决方案都不适合我,所以我只是将 config.assets.debug 设置为 false。我不能用那种方式真正调试我的 js,但至少它现在解决了这个问题。

    【讨论】:

    • config.assets.debug = false 让事情变得更糟。请参阅原始问题的更新。谢谢!
    • 您尝试了 Vosobe Kapsimanis 的回答,方法是先发表评论,然后在所有内容上方添加一个空行?您是否尝试过将您的配置与新的 Rails 应用程序进行比较?不过,对我来说,这听起来很像空行问题,这似乎是 rails 部分的错误。
    猜你喜欢
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2011-12-15
    • 2011-11-17
    • 1970-01-01
    相关资源
    最近更新 更多