AttributeError: модуль 'htmlmin.middleware' не имеет атрибута 'MarkRequestMiddleware'
Пытаясь развернуть мое Django приложение на платформе Heroku, включая htmlmin и gzip, приложение падает с кодом ошибки H10. При просмотре журнала похоже, что ошибка связана с
AttributeError: module 'htmlmin.middleware' has no attribute 'MarkRequestMiddleware'
Запуск локально работает идеально (я не знаю почему), но после развертывания на платформе Heroku приложение не работает.
Вот код settings.py:
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
'django.middleware.gzip.GZipMiddleware',
"htmlmin.middleware.HtmlMinifyMiddleware",
"htmlmin.middleware.MarkRequestMiddleware",
"whitenoise.middleware.WhiteNoiseMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.locale.LocaleMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
...
HTML_MINIFY = True
Вот мой requirements.txt файл:
django
django_compressor
htmlmin
gunicorn
django-heroku
pip==21.0.1
numpy==1.19.1
wordcloud==1.8.1
requests==2.24.0
urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1
matplotlib==3.3.4
wikipedia-API==0.5.3
livereload>=2.6.1
whitenoise>=5.0
Вот журнал хвоста в приложении Heroku.
Вот журнал сборки
Есть предложения, как исправить эту ошибку?
Спасибо,
Я бы посоветовал ВСЕГДА пробовать использовать другие промежуточные программы после "django.contrib.sessions.middleware.SessionMiddleware",
, так как иногда данные сессии загружаются заново и другие промежуточные программы не работают идеально.
попробуйте так>>>
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.locale.LocaleMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
'django.middleware.gzip.GZipMiddleware',
"htmlmin.middleware.HtmlMinifyMiddleware",
"htmlmin.middleware.MarkRequestMiddleware",
"whitenoise.middleware.WhiteNoiseMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
Возможно, это сработает. Если нет, то это всегда лучшая практика.
Вот решение, которое я нашел.
- Измените зависимость requirements.txt с
htmlmin
наdjango-htmlmin
. - Включите в settings.py
from htmlmin.minify import html_minify
в качестве ссылки. Причина этого основана на файле middleware.py из оригинальной библиотеки, чтобы гарантировать связь между классомHtmlMinifyMiddleware
иMarkRequestMiddleware
.
При развертывании в Heroku работает отлично.