2013-06-06 15 views
16

Utilizzo Rails 3.2.13 e Rails Asset Pipeline. Voglio usare Asset Pipeline in modo da poter usare SASS, CoffeeScript ed ERB per i miei asset e fare in modo che la pipeline li compili automaticamente, quindi non posso disattivare la pipeline in fase di sviluppo. Non sto precompilando le risorse in sviluppo mai e non c'è nemmeno una directory public/assets/.Disabilitare la memorizzazione nella cache degli asset dei pignoni in fase di sviluppo

Tuttavia, quando faccio modifiche a un file incluso, ad esempio in un file _partial.html.erb che è incluso (resa) in un file layout.html.erb, senza modificare il file facendo la includendo in sé (in questo esempio layout.html.erb), Pignoni doesn' t rilevare la modifica e invalidare la cache, quindi continuo a ricevere lo stesso file stantio. Quando lo faccio in sviluppo attivo, voglio disabilitare qualsiasi memorizzazione nella cache delle risorse in modo da poter ottenere le modifiche su ogni richiesta, ma non riesco a capire come farlo. Ho impostato tutti i seguenti nel mio development.rb:

config.action_controller.perform_caching = false 
config.action_dispatch.rack_cache = nil 
config.middleware.delete Rack::Cache 
config.assets.debug = true 
config.assets.compress = false 
config.cache_classes = false 

Eppure, anche con questo, i file mostrano sotto tmp/cache/assets/ e tmp/cache/sass/ e le modifiche non sono disponibili sulle richieste future. In questo momento devo cancellare manualmente quelle directory ogni volta che voglio vedere un cambiamento.

Purtroppo, l'intero contenuto della sezione How Caching Works della Guida RoR per l'Asset Pipeline è:

Pignoni utilizza l'archivio di cache di default Rails ad attività di cache in sviluppo e produzione.

TODO: aggiungere ulteriori informazioni sulla modifica del negozio predefinito.

Quindi, come posso ottenere Pignoni per compilare le risorse su richiesta ma non memorizzare nella cache i risultati?

risposta

26

Ecco l'incantesimo magico:

config.assets.cache_store = :null_store # Disables the Asset cache 
config.sass.cache = false # Disable the SASS compiler cache 

Il gasdotto risorsa ha il proprio esempio di una cache e impostando config.assets.cache = false non fa nulla, quindi bisogna impostare la cache di essere la null_store per disattivarlo.

Anche in questo caso, il compilatore SASS ha la propria cache e, se è necessario disabilitarlo, è necessario disabilitarlo separatamente.

+0

che è totalmente sconosciuto. :-) Sono contento che tu l'abbia elaborato ... –

+0

Questo mi stava uccidendo assolutamente dovendo accendere e spegnere la cache dell'archivio file quando provavo a testare la logica di caching delle azioni. (senza la parte di caching effettiva). Grazie. – CrazyVipa

+0

Questo non funziona – Benj

1

Ho creato il seguente elenco (https://gist.github.com/metaskills/9028312) che fa proprio questo e trovato che è l'unico modo che funziona per me.

# In config/initializers/sprockets.rb 

require 'sprockets' 
require 'sprockets/server' 

Sprockets::Server.class_eval do 

    private 

    def headers_with_rails_env_check(*args) 
    headers_without_rails_env_check(*args).tap do |headers| 
     if Rails.env.development? 
     headers["Cache-Control"] = "no-cache" 
     headers.delete "Last-Modified" 
     headers.delete "ETag" 
     end 
    end 
    end 
    alias_method_chain :headers, :rails_env_check 

end 
+0

è lo stesso anche qui, ha funzionato con un reset della cache del browser – brauliobo

0

La risposta accettata non sta facendo correttamente e si degrada le prestazioni in fase di sviluppo disabilitando la cache totalmente. Rispondendo alla domanda originale, si desidera che le modifiche ai file di riferimento invalidi la cache delle risorse anche se non sono incluse direttamente.

La soluzione è semplicemente dichiarando tale dipendenza tale che pignoni sa che la cache deve essere invalidata:

# layout.html.erb 
<% depend_on Rails.root.join('app').join('views').join('_partial.html.erb') %> 
# replace the above with the correct path, could also be relative but didn't try 
Problemi correlati