2011-11-16 12 views
36

Sono un po 'confuso perché sembra che application.css si includa due volte, una volta quando elenca le risorse dal manifest e quindi una cache di quello. Così, quando elimino un singolo file, sembra ancora rimanere in vita all'interno del file application.css.rails 3.1 asset pipeline css caching in sviluppo

application.css (fonte)

/* 
*= require twitter/bootstrap 
*= require_self 
*= require_tree ./common 
*= require_tree ./helpers 
*/ 

che funziona come previsto e uscite in modalità dev tutte le pertinenti singoli file

development.rb

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

    # Expands the lines which load the assets 
    config.assets.debug = true 

uscita

<link href="/assets/twitter/bootstrap.css?body=1" media="screen" rel="stylesheet" type="text/css" /> 
<link href="/assets/application.css?body=1" media="screen" rel="stylesheet" type="text/css" /> 
<link href="/assets/common/announcement.css?body=1" media="screen" rel="stylesheet" type="text/css" /> 
<link href="/assets/common/button.css?body=1" media="screen" rel="stylesheet" type="text/css" /> 
<Blah blah> 

application.css (output)

Questo dovrebbe essere vuoto? Dal momento che tutto quello che ho nel mio file application.css è manifest e non css effettivo ma invece ottengo tutto il mio codice concatenato 106kb lungo.

IE se rimuovo un file nella directory comune, non scompare. Non è più elencato nell'output ma il css appare ancora dall'applicazione.css

+2

Ho esattamente lo stesso problema sia con css che con js .. non riesco a capirlo. Le "risposte" sotto non affrontano il problema. Sto solo lavorando in modalità dev ora. Come disattivare la concatenazione e la minimizzazione? Sta facendo funzionare i miei plugin jQuery due volte, il CSS è raddoppiato. – dsaronin

+2

In config/environments/development.rb, se imposto config.assets.debug = false, i doppi carichi non si verificano perché i tag javascript/stylesheet aggiuntivi non vengono generati. Non so se le modifiche, tuttavia, vengano apportate dinamicamente ai file consolidati. – dsaronin

+2

hai mai trovato una soluzione a questo @holden? Ho gli stessi problemi e sto cercando disperatamente di capirlo. – Josh

risposta

42

Ho avuto un problema simile prima. È stato causato dopo che avevo precompilato le risorse che stava seguendo dopo applcation.css all'interno della cartella pubblica e nella directory apps. Non sono sicuro di come aggiustarlo in modo che non continui a succedere mentre è in modalità dev, ma se elimini la tua directory /public/assets dovresti correggerla.

Controllare e vedere se si dispone di una cartella di pubblico/attività, se lo si fa ed è pieno, è probabilmente perché si vede il doppio.

+2

come faccio a nascondere le risorse nella cartella pubblica tra le modifiche alla produzione e il ritorno allo sviluppo? Posso rimuoverlo dal mio percorso in dev in qualche modo? – holden

+4

Ho eliminato il mio 'application.js' e' application.css' ma ho lasciato le versioni con impronta digitale. Sembra che funzioni per me. – ZMorek

+0

L'eliminazione del mio application.css e apllication.css.gz ha risolto il problema. Grazie. –

-5

Le risorse eseguono meglio il loro lavoro quando si esegue l'applicazione nell'ambiente di produzione, quindi si caricherà solo il file application.css con tutti i file incluso e compresso, lì per ridurre la richiesta del server e questo application.css con gli stili compressi verrà memorizzato nella cache.

http://guides.rubyonrails.org/asset_pipeline.html

10

Si potrebbe desiderare di guardare

https://stackoverflow.com/a/7854902/686460

"Aggiunta config.serve_static_assets = false per development.rb impedirà il caricamento dei file da/pubblico/attività"

che ha fatto per me.

+0

Questo non ha funzionato per me, sfortunatamente, sta ancora servendo una versione compressa di application.js direttamente da/public/assets –

+0

Oops, scusa @Agustin, questa soluzione ha funzionato. Tuttavia, tutte le risorse che non facevano parte della pipeline Asset non sono più servite (come favicon.ico e font). Sembra che dovrò trovare una soluzione per quei beni. –

+0

Questa risposta suggerisce un altro approccio: assegnare una cartella di risorse fittizie per l'ambiente di sviluppo. http://stackoverflow.com/a/11587288/550712 –

7

@ soluzione di Agustin lo fa per me, ma qui ci sono un paio di cose che dovete fare:

  1. Elimina tutto in/tmp/cache/patrimonio

  2. Aggiungi config.serve_static_assets = false a development.rb o test.rb (crediti per @Agustin)

  3. Riavviare il server.

  4. Assicurarsi che application.js/.css non sia memorizzato nella cache del browser.Vai a http://localhost:3000/assets/application.js?body=1 e premi Ctrl + F5 per forzare l'aggiornamento (puoi anche provare ad aggiungere un parametro randomizer alla fine: http://localhost:3000/assets/application.js?body=1&rnd=12343 Se ottieni qualcos'altro e ctrl + f5 non ha ancora aiutato, è necessario svuotare la cache del browser.

Saltare uno di questi passaggi ha restituito un application.js cache/css in conflitto con i miei aggiornamenti in singoli file.

+0

dio questo è fastidioso ... non c'è ancora fortuna –

+0

c'è qualcosa nascosto in pubblico? ispeziona la pagina e assicurati che application.css non venga servito due volte (o contenga codice) ... So come ti senti, è molto fastidioso. – Abdo

37

Non ci sono attualmente (2012-09-24) un bug in Rails/pignoni causando per non rilevare correttamente i file importati

Questo deve essere risolto nei binari 3.2.9 e più tardi, ma nel frattempo, è possibile lavorare intorno ad esso come segue:

  1. uccidere l'istanza rotaie
  2. rm-rf tmp/cache
  3. avviare l'istanza rotaie

Si dovrebbe ora sta vedendo il css corretto.

+1

Peter, puoi fornire un collegamento a questo bug? –

+0

volevo solo sottolineare che questo era esattamente quello che dovevo fare. svuotare la cache dopo aver impostato lo switch in development.rb ha funzionato con il trucco – FireDragon

+0

Ho avuto binari mentre eseguivo le modifiche gem, il che ha portato 'twitter-bootstrap-rails' ad avere css stantii. Distrutto la cartella, tutto risolto. Grazie. – ZMorek

4

Il modo migliore, che ha lavorato per me è quello di eliminare il contenuto di tmp/cache/ * directory ...

1

Ho avuto lo stesso problema. Nonostante la cancellazione di tmp/cache e public/assets, il file application.css minified è stato ancora memorizzato nella cache e reso disponibile da qualche parte e le mie modifiche ai singoli file css non sono state pubblicate.

questo ha funzionato per me: nel application.css rimuovere la riga *= require_self

server di riavvio

che sembra rimuovere la cache e se si fa clic sul application.css nella sorgente del browser non sarà più vedere la versione ridotta

sostituire lo *= require_self nel file e continuare lo sviluppo.

3

stava tramontando La cosa che ha funzionato per noi 'config.assets.debug = false'

Questo non è più impostato il codice HTML inclusi CSS come href = "/ Attività/bootstrap-new.css? Corpo = 1" , invece, impostalo come href = "/ assets/bootstrap-new.css", che credo fosse il problema.

0

C'è stato un ultimo passaggio necessario per me, ma l'ho risolto. Ecco quello che ho fatto:

  1. spegnere il server rotaie
  2. beni rastrello: pulite
  3. rake tmp: chiaro
  4. riavviare il server rotaie

Poi, ho rinfrescato il mio schermo in Google Chrome e IT ANCORA NON HA FUNZIONATO. Così, ho lanciato Firefox e voilà, funzionava davvero. Ciò significa che Chrome stava memorizzando nella cache i vecchi file all'interno del browser. Quindi, ho eliminato la cache del browser in Chrome, e ha funzionato!

0

So che questa è una vecchia domanda, ma una soluzione che ha funzionato per me è che avevo nginx proxy al mio ambiente di sviluppo e aveva un blocco location ~ ^/(assets)/ nella configurazione. O commentalo, o prova a riavviare nginx per invalidare la cache. Se stai sviluppando, probabilmente vorrai semplicemente commentarlo interamente.

Ho perso troppo tempo a risolvere il problema fino a quando non me lo ricordavo.