2011-12-08 10 views
10

Tengo varias aplicaciones de rails 3.1, y estoy teniendo este problema en todos ellos.Archivos JS incluidos dos veces en la aplicación de raíles

Tengo un montón de archivos js que se incluyen en mi archivo application.js. Aquí está mi application.js:

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

El problema es que cuando, development.rb, he config.assets.debug establece en true, todos mis archivos javascript llegar doble incluido en la cabecera. En realidad, no están explícitamente doblemente incluidos, sino que se incluyen una vez individualmente y una vez como parte de un archivo compilado application.js. Las etiquetas js include se ven así:

<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> 
… 

¿Qué demonios? El resultado de esto es que varios comportamientos de JQuery onClick() se realizan dos veces y otras tonterías. ¿Cuál es el problema aquí? Para el registro, aquí está toda mi archivo 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 

Respuesta

14

Suena como si es posible que haya precompilado sus activos en algún momento. Verifique el contenido del archivo application.js que se está sirviendo en el desarrollo. Supongo que verá los contenidos agrupados de todos sus otros archivos necesarios. Para solucionar esto, simplemente elimine /public/assets/javascripts/application.js y rebote su servidor.

Si eso no funciona, averigüe de dónde viene la segunda copia (usando Firebug o similar para examinar los archivos servidos) y publique una actualización y veré lo que puedo hacer.

+1

Tiene razón en que los archivos js están compilados en el archivo application.js, pero eso ya lo sabía. Precompilo mis activos antes de enviar mi aplicación a heroku. Parece que debería eliminar mis activos precompilados, gitIgnore el manifest.yml y dejar que Heroku maneje el precompilamiento. Voy a intentar eso. – CharlieMezak

+0

@CharlieMezak hizo eso? –

Cuestiones relacionadas