【问题标题】:JS files double-included in rails appJS文件双重包含在rails应用程序中
【发布时间】:2012-01-16 06:40:35
【问题描述】:

我有几个 rails 3.1 应用程序,我都遇到了这个问题。

我的 application.js 文件中包含一堆 js 文件。这是我的 application.js:

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require_self
//= require_tree .

问题是,当 development.rb 将 config.assets.debug 设置为 true 时,我的所有 javascript 文件都会双重包含在标头中。实际上,它们并没有显式地双重包含,而是它们被单独包含一次,并且作为已编译的 application.js 文件的一部分包含一次。 js包含标签如下所示:

<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/application.js?body=1" type="text/javascript"></script>
<script src="/assets/animation_elements.js?body=1" type="text/javascript"></script>
<script src="/assets/categories.js?body=1" type="text/javascript"></script>
<script src="/assets/facebox.js?body=1" type="text/javascript"></script>
…

那么到底是什么?这样做的结果是各种 JQuery onClick() 行为被执行了两次和其他废话。这里有什么问题?作为记录,这是我的整个 development.rb 文件:

Geobooks::Application.configure do
  # Settings specified here will take precedence over those in config/application.rb

  # In the development environment your application's code is reloaded on
  # every request.  This slows down response time but is perfect for development
  # since you don't have to restart the webserver when you make code changes.
  config.cache_classes = false

  # Log error messages when you accidentally call methods on nil.
  config.whiny_nils = true

  # Show full error reports and disable caching
  config.consider_all_requests_local       = true
  #config.action_view.debug_rjs             = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger
  config.active_support.deprecation = :log

  # Only use best-standards-support built into browsers
  config.action_dispatch.best_standards_support = :builtin

  #for devise
  config.action_mailer.default_url_options = { :host => 'localhost:3000' }

  # Do not compress assets
  config.assets.compress = false

  # Expands the lines which load the assets
  config.assets.debug = false
end

【问题讨论】:

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


    【解决方案1】:

    听起来好像您可能在某个时候预编译了您的资产。检查在开发中提供的 application.js 文件的内容。我猜你会看到所有其他必需文件的捆绑内容。要解决此问题,只需删除 /public/assets/javascripts/application.js 并退回您的服务器。

    如果这不起作用,请找出第二个副本的来源(使用 Firebug 或类似工具检查提供的文件)并发布更新,我会看看我能做些什么。

    【讨论】:

    • js 文件编译成 application.js 文件是完全正确的,但我已经知道了。在将我的应用程序推送到 heroku 之前,我预编译了我的资产。听起来我应该删除我的预编译资产,gitIgnore manifest.yml,让 heroku 处理预编译。我会试试的。
    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多