这很奇怪......
我布局的 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,这是怎么回事?
最佳答案
我之前的 Rails 应用程序也遇到过同样的问题。包括行
config.serve_static_assets = false
在 development.rb
文件中解决了这个问题。 (根据 rubyonrails.org,此配置项在开发中默认为 true
,在生产中默认为 false
,这就是您在生产中没有遇到此问题的原因。)
此设置决定 Rails 是否应该在 public/
目录中提供静态断言。在生产中,网络服务器将处理此任务,因此设置默认为 false
。
您可能想看看这些帖子:
正如@gertas 在这篇文章中所说:
Adding
config.serve_static_assets = false
todevelopment.rb
will prevent loading files from/public/assets
.
最后,您还可以使用位于 http://guides.rubyonrails.org/configuring.html 的 Rails 配置指南。
它对 Rails 应用程序中的配置项进行了全面的解释。
关于javascript_include_tag :application loads javascripts twice in development environment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20491363/