我使用 django-compressor 的代码在 DEBUG=True 或 False 的本地计算机上工作,但是当我推送到生产环境时,即由 IIS 提供服务的 Windows Server 2019,它只适用于 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
设置.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 调用,它只会提供缓存的东西。