2016-08-03 16 views
0

Ich verwende erfolgreich WhiteNoise in meinem Django-Projekt.Django WhiteNoise collectstatic wiederholt CSS-Dateien nachbearbeitet

Mein Problem ist, wenn Sie den Befehl collectstatic ausführen. WhiteNoise postet alle meine CSS-Dateien, auch wenn sie sich nicht geändert haben. Es werden keine .js- oder .png-Dateien, nur .css-Dateien, nachbearbeitet.

Dies scheint ein Fehler in WhiteNoise. Hat jemand anderes dieses Verhalten gesehen?

Ein Beispiel:

Das erste Mal, dass ich collectstatic laufen, alle Dateien von django und nachbearbeitet von Whitenoise kopiert:

Copying '<path...>.svg' 
Copying '<path...>.js' 
Copying '<path...>.css' 
Copying '<path...>.txt' 
... etc ... 
Post-processed '<path...>.svg' 
Post-processed '<path...>.js' 
Post-processed '<path...>.css' 
Post-processed '<path...>.txt' 
... etc ... 

77 static files copied to 'C:\<path...>\staticfiles', 77 post-processed. 

Das ist alles richtig funktioniert.

Aber wenn ich sofort collectstatic wieder laufen (ohne Dateien zu ändern), Whitenoise nachbearbeitet die CSS-Dateien wieder:

Post-processed '<path...>.css' 
Post-processed '<path...>.css' 
... etc ... 

0 static files copied to 'C:\<path...>\staticfiles', 77 unmodified, 13 post-processed. 

Dies ist ein Problem für mich, weil ich bin mit Whitenoise in Entwicklung unter Berücksichtigung als sowie in der Produktion, um die Unterschiede zwischen meiner Entwicklungs- und Produktionsumgebung zu minimieren. Warten, dass WhiteNoise jede .css-Datei im Projekt (einschließlich beliebiger Bibliotheken) nachbearbeitet, wenn ich eine Datei ändere, ist eindeutig zu viel, um nach einer Entwicklungsumgebung zu fragen.

Dies fühlt sich wie ein Fehler in WhiteNoise, weil es richtig bemerkt, dass die .js und .svg-Dateien nicht geändert haben, aber nicht die .css-Dateien. Hat jemand anderes dieses Verhalten gesehen?

Antwort

3

Dies ist eine Funktion von Django und kein Bug in WhiteNoise: CSS-Dateien können Verweise auf andere statische Dateien (normalerweise Bilder) enthalten und der Cache-Busting-Mechanismus bewirkt, dass sich die Namen dieser Bilddateien ändern, wenn sich deren Inhalt ändert . Daher kann sich die verarbeitete Ausgabe der CSS-Datei ändern, selbst wenn die ursprüngliche CSS-Datei nicht existiert, nur weil eines der Bilder, auf die sie verweist, ihren Inhalt geändert hat. Deshalb Django reprocesses die CSS-Dateien jedes Mal.

Sie müssen collectstatic in Entwicklung nicht ausführen, um Änderungen an Ihren Dateien jedoch abzurufen. WhiteNoise folgt dem Standard-Django-Verhalten, dass unverarbeitete Dateien direkt zugestellt werden, wenn die Einstellung DEBUG auf True gesetzt ist.

+0

Vielen Dank! Ich habe nicht bemerkt, dass WhiteNoise im Debug-Modus keine Collectstatic benötigt - das wird meinen Debugging-Zyklus erheblich beschleunigen. Es ist eine Schande, dass Django nicht herausfinden kann, welche CSS-Dateien erneut verarbeitet werden müssen, aber es ist keine große Ineffizienz für Produktions-Builds, die normalerweise ohnehin von clean durchgeführt werden. –