Действительно ли whitenoise требует collectstatic?

Я изучаю использование whitenoise для обслуживания статических файлов в упакованном приложении Django. в контейнере Docker. В документации сказано:

В рамках развертывания вашего приложения вам нужно будет запустить ./manage.py collectstatic, чтобы поместить все ваши статические файлы в STATIC_ROOT. (Если вы работаете на Heroku, это делается автоматически.)

Это действительно нужно? Я не запускаю ./manage.py collectstatic, и статические файлы все еще обслуживаются.

Если это не нужно, это оптимизация? Я пытаюсь избежать ненужных шагов в процессе развертывания.


person pupeno    schedule 07.11.2018    source источник


Ответы (1)


Как говорится в этой цитате, Whitenoise обслуживает файлы из STATIC_ROOT. collectstatic собирает файлы из STATICFILES_DIRS и любых статических каталогов, специфичных для приложения, и помещает их в STATIC_ROOT.

Но есть две ситуации, когда он будет обслуживать файлы без запуска collectstatic. Во-первых, если ваши файлы уже находятся в STATIC_ROOT. Их быть не должно, но частой ошибкой является установка значения STATIC_ROOT для каталога, содержащего исходные файлы. Однако в этом случае он, например, не найдет файлы администратора, которые нужно было бы собрать.

Другая ситуация, если вы работаете с DEBUG=True. Whitenoise наследует это значение для своей USE_FINDERS настройки, что заставляет его искать в в тех же местах, что и сам collectstatic для обслуживания файлов. Ясно, что вы не захотите работать в рабочей среде с включенным DEBUG, но вы можете установить этот параметр явно. Но, как указывает эта ссылка на документы, это отключит функции кэширования и сжатия Whitenoise.

person Daniel Roseman    schedule 07.11.2018