2013-06-06 11 views
16

Ich verwende Rails 3.2.13 und die Rails Asset Pipeline. Ich möchte die Asset-Pipeline verwenden, damit ich SASS und CoffeeScript und ERB für meine Assets verwenden kann und die Pipeline sie automatisch kompiliert, sodass ich die Pipeline in der Entwicklung nicht deaktivieren kann. Ich bin nicht vorkompilieren Vermögenswerte in Entwicklung jemals und es gibt nicht einmal ein public/assets/ Verzeichnis.Disable Ritzels Asset Caching in Entwicklung

Allerdings, wenn ich Änderungen an einer Datei enthalten machen, wie zum Beispiel zu einer _partial.html.erb-Datei, die (gerendert) in einer layout.html.erb Datei enthalten ist, ohne dass die Datei verändert sich die einschließlich sich selbst zu tun (in diesem Beispiel layout.html.erb), Ritzel doesn‘ t die Änderung erkennen und den Cache ungültig machen, so bekomme ich die gleiche veraltete Datei. Wenn ich dies in der aktiven Entwicklung mache, möchte ich das Zwischenspeichern von Assets deaktivieren, damit ich die Änderungen bei jeder Anforderung abrufen kann, aber ich kann nicht herausfinden, wie das geht. Ich habe alle folgenden in meinem development.rb gesetzt:

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 

Doch auch mit diesem, Dateien unter tmp/cache/assets/ und tmp/cache/sass/ zeigen und Änderungen sind auf zukünftige Anforderungen nicht zur Verfügung. Jetzt muss ich diese Verzeichnisse jedes Mal manuell löschen, wenn ich eine Änderung sehen möchte.

Leider wird der gesamte Inhalt des How Caching Works Abschnitt der RoR Leitfaden für die Asset-Pipeline ist:

Pinion verwendet den Standard Rails Cache-Speicher in den Cache Vermögenswerte in Entwicklung und Produktion.

TODO: Fügen Sie weitere Informationen zum Ändern des Standardspeichers hinzu.

Also, wie kann ich Sprockets erhalten, Assets auf Anfrage zu kompilieren, aber die Ergebnisse nicht zwischenzuspeichern?

Antwort

26

Hier ist der Zauberspruch:

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

Die Asset-Pipeline verfügt über eine eigene Instanz eines Cache ist und Einstellung config.assets.cache = false tut nichts, so dass Sie den Cache setzen die null_store zu deaktivieren, es zu sein.

Auch dann hat der SASS Compiler einen eigenen Cache, und wenn Sie ihn deaktivieren müssen, müssen Sie ihn separat deaktivieren.

+0

, die völlig fremd ist. :-) Froh, dass Sie es ausgearbeitet haben ... –

+0

Das hat mich absolut dazu gebracht, den Cache des Dateispeichers ein- und auszuschalten, wenn ich versuchte, die Action-Caching-Logik zu testen. (ohne den eigentlichen Caching-Teil). Danke. – CrazyVipa

+0

Dies funktioniert nicht – Benj

0

Die akzeptierte Antwort macht es nicht richtig und verschlechtert die Leistung in der Entwicklung, indem der Cache vollständig deaktiviert wird. Bei der Beantwortung Ihrer ursprünglichen Frage möchten Sie, dass Änderungen an referenzierten Dateien den Asset-Cache ungültig machen, auch wenn sie nicht direkt enthalten sind.

Die Lösung ist einfach durch eine solche Abhängigkeit so erklärt, dass Zahnräder weiß, dass der Cache für ungültig erklärt werden sollte:

# 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