#django #django-compressor #whitenoise #django-3.1
#django #django-compressor #белый шум #django-3.1
Вопрос:
Мой код с django-compressor работает на моем локальном компьютере с DEBUG = True или False, но когда я запускаю его в производство, которое представляет собой Windows Server 2019, обслуживаемый IIS, тогда он работает только с DEBUG = True . Если я установил значение False, я получаю следующую ошибку: OfflineGenerationError: у вас включено автономное сжатие, но ключ отсутствует в автономном манифесте.
Я просмотрел много разных других сообщений, касающихся этой же проблемы, но пока ни один из них не решил ее для меня. Вот мои данные:
I am using pipenv
[requires]
python_version = "3.8"
[packages]
django = "3.1.2"
django-compressor = "2.4"
whitenoise = "5.2.0" {extras = ["brotli"], version = "1.0.9"}
wfastcgi = "3.0.0"
Сведения о производстве
Windows Server 2019
IIS for 2019
settings.py
INSTALLED_APPS = [
...
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
'compressor',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
...
]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/assets/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'assets')
]
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder',
)
COMPRESS_STORAGE = "compressor.storage.GzipCompressorFileStorage"
COMPRESS_FILTERS = {
"css": [
"compressor.filters.css_default.CssAbsoluteFilter",
"compressor.filters.cssmin.rCSSMinFilter",
],
"js": ["compressor.filters.jsmin.JSMinFilter"],
}
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
WHITENOISE_MAX_AGE = 31536000 if not DEBUG else 0 # 1 year
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
Любые мысли о том, как я могу отладить, почему это не будет работать с DEBUG = False, но работает во всех остальных 3 ситуациях.
Еще одна вещь, которую я выброшу, у меня еще нет настройки SSL на производстве, может ли это быть причиной того, что он не работает? Я думал, что где-то читал о чем-то, что доставляло кэшированное что-то, только если это был вызов SSL.
Ответ №1:
Хорошо, решение моей проблемы смехотворно, но я, наконец, понял это. Неудивительно, что никакие другие решения, похоже, мне не помогли.
У меня был файл изображения с заглавной буквой, например: «Logo.svg», но я называл это так:
<img src="{% static 'images/logo.svg' %}">
Я переименовал свой файл в «logo.svg» при разработке, но, по-видимому, git commit не получил это изменение и не изменил его на производстве. Таким образом, он работал локально, но при запуске collectstatic он создал манифест для Logo.svg (заглавная буква), и сайт искал logo.svg (строчная буква). Сообщение об ошибке OfflineGenerationError не помогло в этом разобраться. В любом случае, переименовал его в нижний регистр на сервере, и он работает как с whitenoise, так и с django-compressor.
Я надеюсь, что это может помочь кому-то еще. Что дало мне подсказку, так это то, что я, наконец, отключил django-compressor и просто использовал белый шум, и это дало мне явную ошибку.