Почему мои статические файлы не обслуживаются при развертывании на сервере 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
Попробуйте это:
- Добавьте в файл setting.py установленные приложения
'whitenoise.runserver_nostatic'
. - Добавьте в ваш setting.py MIDDLEWARE
'whitenoise.middleware.WhiteNoiseMiddleware'
- Добавьте в ваш seeting.py эти 3 строки .
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, создайте ее вручную. Это нужно сделать только один раз и все. Пустая папка и ничего больше.