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.

Вернуться на верх