Почему мои статические файлы не обслуживаются при развертывании на сервере Heroku? (Django)

Это распространенная ошибка пользователей Django, которая заключается в том, что статические файлы не обслуживаются в продакшене при Debug=False. Я перепробовал много методов, чтобы решить эту проблему, но все еще не могу найти правильное решение. Ниже приведен мой settings.py

...
DEBUG = False

MIDDLEWARE = [
    'whitenoise.middleware.WhiteNoiseMiddleware',
    ...
]
...

STATIC_URL = '/static/'
STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, 'static'), 
    os.path.join(BASE_DIR, 'main/static'),
    os.path.join(BASE_DIR, 'member/static'),
    os.path.join(BASE_DIR, 'register/static'),
]

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

STATICFILES_FINDERS = [
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

Я не вижу, что я сделал не так.

*Единственное, что может быть потенциальной причиной, это то, что я установил DISABLE_COLLECTSTATIC=1 с момента первоначального развертывания на сервер heroku.

remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Building on the Heroku-20 stack
remote: -----> Using buildpack: heroku/python
remote: -----> Python app detected
remote: -----> Using Python version specified in runtime.txt
remote: -----> No change in requirements detected, installing from cache
remote: -----> Using cached install of python-3.7.12
remote: -----> Installing pip 21.3.1, setuptools 57.5.0 and wheel 0.37.0
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote: -----> Skipping Django collectstatic since the env var DISABLE_COLLECTSTATIC is set.
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 102.1M
remote: -----> Launching...
remote:        Released v153

Попробуйте это:

  1. Добавьте в файл setting.py установленные приложения 'whitenoise.runserver_nostatic'.
  2. Добавьте в ваш setting.py MIDDLEWARE 'whitenoise.middleware.WhiteNoiseMiddleware'
  3. Добавьте в ваш seeting.py эти 3 строки
  4. .
STATIC_URL = '/static/'
STATICFILES_DIRS = (str(BASE_DIR.joinpath('static')),)
STATIC_ROOT = str(BASE_DIR.joinpath('staticfiles'))
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' # new
django_heroku.settings(locals())

для последней строки здесь вам нужно установить django_heroku (не django_on_heroku, будьте осторожны)

Для получения дополнительной информации посмотрите здесь: https://learndjango.com/tutorials/django-static-files.

P.S. Если после этого не удается найти папку staticfiles, создайте ее вручную. Это нужно сделать только один раз и все. Пустая папка и ничего больше.

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