这很奇怪......
我布局的head
部分中的这行代码:
<%= javascript_include_tag :application %>
此html中的结果:
<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/jquery.prettyPhoto.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.qtip.min.js?body=1" type="text/javascript"></script>
<script src="/assets/dataTables/jquery.dataTables.js?body=1" type="text/javascript"></script>
<script src="/assets/datatable-enables.js?body=1" type="text/javascript"></script>
<script src="/assets/modernizr-1.7.min.js?body=1" type="text/javascript"></script>
<script src="/assets/qtips.js?body=1" type="text/javascript"></script>
<script src="/assets/pagination.js?body=1" type="text/javascript"></script>
<script src="/assets/payments.js?body=1" type="text/javascript"></script>
<script src="/assets/replies.js?body=1" type="text/javascript"></script>
<script src="/assets/searches.js?body=1" type="text/javascript"></script>
<script src="/assets/static_pages.js?body=1" type="text/javascript"></script>
<script src="/assets/user.js?body=1" type="text/javascript"></script>
<script src="/assets/gmaps4rails/gmaps4rails.base.js?body=1" type="text/javascript"></script>
<script src="/assets/gmaps4rails/gmaps4rails.bing.js?body=1" type="text/javascript"></script>
<script src="/assets/gmaps4rails/gmaps4rails.googlemaps.js?body=1" type="text/javascript"></script>
<script src="/assets/gmaps4rails/gmaps4rails.mapquest.js?body=1" type="text/javascript"></script>
<script src="/assets/gmaps4rails/gmaps4rails.openlayers.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.rateit.min.js?body=1" type="text/javascript"></script>
<script src="/assets/feedbacks.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
正如您所看到的,它会为每个javascript资源生成一个调用和对已编译的applications.js的调用,当然还包括每个javascript资源。
因此,每个javascript被调用两次!
这仅在开发环境中发生,而在生产环境中,生成的html恰好只是:
<script src="/assets/application.js?body=1" type="text/javascript"></script>
这是我的application.js
:
// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require jquery.prettyPhoto
//= require jquery.qtip.min
//= require dataTables/jquery.dataTables
//= require datatable-enables
//= require modernizr-1.7.min
//= require qtips
//= require pagination
//= require payments
//= require replies
//= require searches
//= require static_pages
//= require user
//= require gmaps4rails/gmaps4rails.base
//= require gmaps4rails/gmaps4rails.bing
//= require gmaps4rails/gmaps4rails.googlemaps
//= require gmaps4rails/gmaps4rails.mapquest
//= require gmaps4rails/gmaps4rails.openlayers
//= require jquery.rateit.min
//= require feedbacks
我正在驾驶Rails 3.2.13,这是怎么回事?
答案 0 :(得分:4)
在使用我的Rails应用程序之前,我遇到了同样的问题。包括行
config.serve_static_assets = false
development.rb
文件中的解决了这个问题。 (根据rubyonrails.org,此配置项在开发中默认为true
,在生产中默认为false
,这就是您在生产中没有遇到此问题的原因。)
此设置决定Rails是否应该为public/
目录中的静态断言提供服务。在生产中,Web服务器将处理此任务,因此设置默认为false
。
您可能需要查看以下帖子:
正如@gertas在这篇文章中所说:
将
config.serve_static_assets = false
添加到development.rb
会阻止从/public/assets
加载文件。
最后,您还可以在http://guides.rubyonrails.org/configuring.html
使用Rails的配置指南它提供了有关Rails应用程序中配置项的全面说明。
答案 1 :(得分:4)
application.js没有加载两次,但案例是 -
在开发环境中,默认情况下不会预编译资产。 所以你的application.js加载到所有javascripts的末尾。实际上,application.js文件包含运行应用程序所需的所有必需的js文件,如果在此之前没有加载任何文件,它将显示错误。
例如,我的application.js文件有这个内容
//= require jquery
//= require jquery_ujs
//= require foundation
//= require turbolinks
//= require_tree .
然后它意味着必须首先加载所有这些js文件,然后加载application.js。
但是在生产环境中会发生什么,所有的js文件都是在单个application.js文件中预编译的,你只看到一个文件。
所以,我建议不要担心这个。这是rails 3应用程序在开发环境中的正常行为。
答案 2 :(得分:1)
它不包括application.js
两倍。无论您在application.js中包含哪些内容都将在开发环境中引用,并且在application.js
中编写的任何JS代码都将在最后application.js
次调用中添加。尝试点击application.js参考,你会注意到这一点。
在生产环境中;它只会引用包含所有其他引用文件代码的application.js
缩小。
答案 3 :(得分:1)
运行
bundle exec rake assets:clean
这会清除所有预编译的资产,因为您在开发环境中不需要它们(它们通过资产管道提供)。
答案 4 :(得分:0)
从公用文件夹中删除Asset Pipeline文件夹。它默认自动加载该区域的js文件。