如何解决Windows 2019 IIS提供的“ OfflineGenerationError:您已启用脱机压缩功能,但键...”?

问题描述

我的带有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压缩机,只使用了白噪声,这给了我明显的错误。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...