Django/Vue -> Heroku: статические файлы не загружаются на рабочем сервере
Статические файлы загружаются при DEBUG=True
(локально и на dev-сервере), но не загружаются при DEBUG=False
(production).
STATICFILES_DIRS
установлен на мой dist
dir, созданный Vue, а dist отсутствует в .gitignore
. Heroku по умолчанию запускает collectstatic при каждом развертывании (я не менял это).
Фактическая ошибка - 404 при попытке загрузить любой статический файл. Используется пакет whitenoise
. Я обновил настройки промежуточного ПО и wsgi.py
в соответствии с документацией, а также установил переменную настроек, которая включает сжатие через whitenoise
(также в соответствии с документацией whitenoise
).
whitenoise
обычно нормально работает с другими приложениями. Я не уверен, что здесь что-то не так. Разница в том, что я впервые использую Vue. Я никогда раньше не использовал js-фреймворк.
Может ли кто-нибудь помочь?
Если вы еще не сделали этого, то в settings.py
добавьте переменную STATIC_ROOT
со значением, соответствующим полному абсолютному пути к папке статических файлов. Это важно, потому что вы определяете папку для своих статических файлов. Что-то вроде этого
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
if not DEBUG:
STATIC_ROOT = 'os.path.join(BASE_DIR, 'staticfiles')
Когда в вопросе OP упоминает, что OP добавил STATICFILES_DIRS
, это замечательно, но это используется для включения дополнительных директорий для collectstatic. Подробнее об этом здесь.
После этого сделайте новую сборку, и Heroku должен запустить collectstatic
для сбора статики в папку STATIC_ROOT
. Если сборка не удалась, значит, collectstatic
был неудачным. Чтобы диагностировать проблему, Heroku предоставляет трассировку,
$ heroku config:set DEBUG_COLLECTSTATIC=1
Проблема была в django-heroku. В моих настройках я использовал django-heroku. Удаление его заставило статические файлы загружаться на production.