问题描述
我的带有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
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调用,它只会传递缓存的东西。
解决方法
好的,解决我的问题的方法是可笑的,但是我终于弄明白了。难怪没有其他解决方案似乎对我有帮助。
我有一个带有大写字母的图像文件,例如:“ Logo.svg”,但是我这样称呼它:
<img src="{% static 'images/logo.svg' %}">
我在开发时将文件重命名为“ logo.svg”,但显然git commit并没有得到该更改,并且在生产时也没有更改。因此它在本地工作,但是在生产中,当运行collectstatic时,便为Logo.svg(大写字母)创建了清单,站点正在寻找logo.svg(小写字母)。 OfflineGenerationError的错误消息对解决该问题没有太大帮助。无论如何,在服务器上将其重命名为小写,并且同时使用whitenoise和django-compressor。
我希望这可以帮助其他人。提示我的是,我终于脱下了django压缩机,只使用了白噪声,这给了我明显的错误。