2016-08-03 4 views
0

Я успешно использую WhiteNoise в своем проекте Django.Django WhiteNoise collectstatic неоднократно обрабатывает файлы CSS

Моя проблема заключается в том, чтобы запустить команду collectstatic. WhiteNoise обрабатывает все мои .css-файлы, даже если они не изменились. Он не требует излишней обработки файлов .js или .png, только .css-файлов.

Это похоже на ошибку в WhiteNoise. Кто-нибудь еще видел это поведение?

Пример:

В первый раз я бегу collectstatic, все файлы копируются Джанго и пост-обработке WhitENoise:

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. 

Это все работает правильно.

Но если я сразу же запустить collectstatic снова (без изменения файлов), WhitENoise пост-процессы в .css файлы снова:

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

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

Это вопрос для меня, потому что я рассматриваю, используя WhitENoise в развитии, как а также в производстве, чтобы минимизировать различия между моей средой разработки и производства. Ожидание WhiteNoise для постпроцесса каждого .css-файла в проекте (включая любые библиотеки) всякий раз, когда я меняю любой файл, явно слишком много, чтобы попросить среду разработки.

Это похоже на ошибку в WhiteNoise, потому что она правильно замечает, что файлы .js и .svg не изменились, но не файлы .css. Кто-нибудь еще видел это поведение?

ответ

3

Это особенность Django, а не ошибка в WhiteNoise: файлы CSS могут содержать ссылки на другие статические файлы (обычно изображения), а механизм кэширования-сбоев заставляет имена этих файлов изображений меняться всякий раз, когда изменяется их содержимое , Таким образом, обработанный вывод файла CSS может измениться, даже если исходный файл CSS отсутствует, только потому, что одно из изображений, на которое оно ссылается, изменило его содержимое. Вот почему Django reprocesses CSS-файлы каждый раз.

Вам не нужно запускать collectstatic в разработке, чтобы получать изменения в ваших файлах. WhiteNoise следует стандартным поведением Django для обслуживания ваших необработанных файлов непосредственно, когда параметр DEBUG имеет значение True.

+0

Большое спасибо! Я не понимал, что WhiteNoise не нуждается в сборке в режиме отладки, что значительно ускорит мой цикл отладки. Жаль, что Django не может решить, какие файлы CSS нуждаются в переработке, но это не большая часть неэффективности для производственных сборок, которые обычно будут выполняться с нуля в любом случае. –