2011-12-08 11 views
10

Ho diverse app di rotaie 3.1 e ho riscontrato questo problema in tutte.File JS inclusi due volte nell'app per rails

Ho un sacco di file js che vengono inclusi nel mio file application.js. Ecco il mio application.js:

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

Il problema è che quando, development.rb, ho config.assets.debug impostata su true, tutti i miei file JavaScript ottenere doppio incluso nell'intestazione. In realtà, non sono esplicitamente inclusi in doppio, ma piuttosto sono inclusi una volta singolarmente e una volta come parte di un file application.js compilato. Le tag include js in questo modo:

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

Quindi che diavolo? Il risultato è che vari comportamenti di JQuery onClick() vengono eseguiti due volte e altre sciocchezze. qual è il problema qui? Per la cronaca, ecco tutto il mio file 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 

risposta

14

Sembra come se si può avere precompilato le risorse ad un certo punto. Controlla il contenuto del file application.js che è in fase di sviluppo. La mia ipotesi è che vedrai il contenuto in bundle di tutti gli altri file richiesti. Per risolvere questo problema, basta eliminare /public/assets/javascripts/application.js e rimbalzare il server.

Se ciò non funziona, capire da dove proviene la seconda copia (usando Firebug o simile per esaminare i file serviti) e pubblicare un aggiornamento e vedrò cosa posso fare.

+1

Hai esattamente ragione che i file js sono compilati nel file application.js, ma lo sapevo già. Ho precompilato le mie risorse prima di spingere la mia app su heroku. Sembra che dovrei eliminare i miei asset precompilati, gitIgnore manifest.yml e lasciare che heroku gestisca la precompilazione. Ci proverò. – CharlieMezak

+0

@CharlieMezak ha funzionato? –

Problemi correlati