在Rails 3.1基于资产的应用程序中包含两次javascript

时间:2011-12-19 07:51:51

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

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

简而言之, js清单中的第一项包括两次。

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

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

这是渲染页面源代码的片段:

<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文件。虽然它在渲染页面中出现两次,但它没有任何效果,因为它什么也没做。另一方面,如果我按照config.assets.debug = false设置development.rb,经常建议,那么我的所有javascript都会被加载两次:

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

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

朱塞佩

3 个答案:

答案 0 :(得分:13)

之前我遇到过类似的事情,我只留下了第一个链接空白,它对我有用。试一试。

/*leave the following line empty */

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

答案 1 :(得分:3)

事实证明,罪魁祸首是rails-widgets插件,特别是this bit of code,是小部件初始化的一部分。

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

虽然我很抱歉没有尽快发现问题对我的设置非常具体,但我仍然希望解决方案可能有用。谢谢大家。

朱塞佩

答案 2 :(得分:1)

看看这个:

Rails 3.1 Assets - Strange Serving in Development

您还应检查您是否未编译资产,即没有公共/资产目录。如果删除它,请退回服务器,你应该好好去。

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