0

我使用 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 调用,它只会提供缓存的东西。

4

1 回答 1

0

好吧,我的问题的解决方案很可笑,但我终于想通了。难怪没有其他解决方案似乎对我有帮助。

我有一个带有大写字母的图像文件,如下所示:“Logo.svg”,但我这样称呼它:

<img src="{% static 'images/logo.svg' %}">

我在开发时将我的文件重命名为“logo.svg”,但显然 git commit 没有得到那个改变,也没有在生产中改变它。所以它在本地工作,但是在运行 collectstatic 的生产环境中,它为 Logo.svg(大写字母)创建了一个清单,并且该站点正在寻找 logo.svg(小写字母)。OfflineGenerationError 的错误消息对弄清楚这一点没有多大帮助。无论如何,在服务器上将它重命名为小写,它同时运行 whitenoise 和 django-compressor。

我希望这可以帮助别人。给我的线索是我终于脱掉了 django-compressor 并且只使用了白噪声,这给了我明显的错误。

于 2020-10-16T22:59:11.470 回答