带有压缩静态文件的 Django Whitenoise
Django Whitenoise with compressed staticfiles
我无法使用 whitenoise 和压缩的静态文件(包括 libsass)将我的 django 项目 运行。在下面的 links 中,我读到只有通过离线压缩所需的静态文件才有可能。但是当我启动 docker 容器时,运行ning compress
命令
docker-compose -f production.yml run --rm django python manage.py compress
给我错误:
ValueError: Missing staticfiles manifest entry for 'sass/app.scss'
在尝试请求网站时出现以下错误(如预期?):
compressor.exceptions.OfflineGenerationError: You have offline compression enabled but key "..." is missing from offline manifest. You may need to run "python manage.py compress"
设置如下(使用cookiecutter-django构建,完整代码见link):
STATIC_ROOT = str(ROOT_DIR("staticfiles"))
STATIC_URL = "/static/"
STATICFILES_DIRS = [str(APPS_DIR.path("static"))]
STATICFILES_FINDERS = [
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
]
STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
STATICFILES_FINDERS += ["compressor.finders.CompressorFinder"]
COMPRESS_PRECOMPILERS = [("text/x-scss", "django_libsass.SassCompiler")]
COMPRESS_CACHEABLE_PRECOMPILERS = (("text/x-scss", "django_libsass.SassCompiler"),)
COMPRESS_ENABLED = env.bool("COMPRESS_ENABLED", default=True)
COMPRESS_STORAGE = "compressor.storage.GzipCompressorFileStorage"
COMPRESS_URL = STATIC_URL
所以在网上搜索了 1 天之后;我被卡住了...感谢任何帮助或建议!
代码库:https://github.com/rl-institut/E_Metrobus/tree/compress
这是用 cookiecutter-django-foundation
构建的
包括对 config/setttings/production.py
的以下更改:
COMPRESS_STORAGE = "compressor.storage.GzipCompressorFileStorage" # Instead of pre-set "storages.backends.s3boto3.S3Boto3Storage"
COMPRESS_ROOT = STATIC_ROOT # Just in case
COMPRESS_OFFLINE = True # Needed to run compress offline
可能相关的links:
- Whitenoise and django-compressor cause 404 for compressed files
- Possible to use WhiteNoise with Django-Compressor?
- Django staticfiles not found on Heroku (with whitenoise)
- https://github.com/django-compressor/django-compressor/issues/486
编辑
使用 Justins answer 解决了它(见下文,有附加更改)。
我的错误是试图用已经 运行ning 容器压缩文件,给我上面的错误。使用以下行更改 Dockerfile 后(注意重复的 collectstatic
cmd!):
python /app/manage.py collectstatic --noinput
python /app/manage.py compress --force
python /app/manage.py collectstatic --noinput
/usr/local/bin/gunicorn config.wsgi --bind 0.0.0.0:5000 --chdir=/app
并且重建图像一切都很顺利:)
此外,与上述设置不同,我必须在 settings/env 文件中设置 COMPRESS_ENABLED=True
。
我刚刚遇到了同样的问题。
将此添加到 project/compose/production/django/start
python /app/manage.py compress --force
即
python /app/manage.py collectstatic --noinput
python /app/manage.py compress --force
/usr/local/bin/gunicorn config.wsgi --bind 0.0.0.0:5000 --chdir=/app
这很奇怪,但效果很好。
通过 whitenoise 收集和压缩静态文件
python manage.py collectstatic --clear
设置COMPRESS_STORAGE = 'compressor.storage.BrotliCompressorFileStorage'
在 CACHE 目录中制作 .br 文件
python manage.py compress --force
设置COMPRESS_STORAGE = 'compressor.storage.GzipCompressorFileStorage'
在 CACHE 目录中制作 .gz 文件
python manage.py compress --force
将新的压缩文件添加到 whitenoise: manifest.json, manifest.json.gz,
manifest.json.br
--no-post-process选项是告诉whitenoise不要再次压缩静态文件。
python manage.py collectstatic --no-post-process
确保 运行 命令按顺序执行。
测试白噪声是否有效
python manage.py runserver --nostatic
我无法使用 whitenoise 和压缩的静态文件(包括 libsass)将我的 django 项目 运行。在下面的 links 中,我读到只有通过离线压缩所需的静态文件才有可能。但是当我启动 docker 容器时,运行ning compress
命令
docker-compose -f production.yml run --rm django python manage.py compress
给我错误:
ValueError: Missing staticfiles manifest entry for 'sass/app.scss'
在尝试请求网站时出现以下错误(如预期?):
compressor.exceptions.OfflineGenerationError: You have offline compression enabled but key "..." is missing from offline manifest. You may need to run "python manage.py compress"
设置如下(使用cookiecutter-django构建,完整代码见link):
STATIC_ROOT = str(ROOT_DIR("staticfiles"))
STATIC_URL = "/static/"
STATICFILES_DIRS = [str(APPS_DIR.path("static"))]
STATICFILES_FINDERS = [
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
]
STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage"
STATICFILES_FINDERS += ["compressor.finders.CompressorFinder"]
COMPRESS_PRECOMPILERS = [("text/x-scss", "django_libsass.SassCompiler")]
COMPRESS_CACHEABLE_PRECOMPILERS = (("text/x-scss", "django_libsass.SassCompiler"),)
COMPRESS_ENABLED = env.bool("COMPRESS_ENABLED", default=True)
COMPRESS_STORAGE = "compressor.storage.GzipCompressorFileStorage"
COMPRESS_URL = STATIC_URL
所以在网上搜索了 1 天之后;我被卡住了...感谢任何帮助或建议!
代码库:https://github.com/rl-institut/E_Metrobus/tree/compress
这是用 cookiecutter-django-foundation
构建的包括对 config/setttings/production.py
的以下更改:
COMPRESS_STORAGE = "compressor.storage.GzipCompressorFileStorage" # Instead of pre-set "storages.backends.s3boto3.S3Boto3Storage"
COMPRESS_ROOT = STATIC_ROOT # Just in case
COMPRESS_OFFLINE = True # Needed to run compress offline
可能相关的links:
- Whitenoise and django-compressor cause 404 for compressed files
- Possible to use WhiteNoise with Django-Compressor?
- Django staticfiles not found on Heroku (with whitenoise)
- https://github.com/django-compressor/django-compressor/issues/486
编辑
使用 Justins answer 解决了它(见下文,有附加更改)。
我的错误是试图用已经 运行ning 容器压缩文件,给我上面的错误。使用以下行更改 Dockerfile 后(注意重复的 collectstatic
cmd!):
python /app/manage.py collectstatic --noinput
python /app/manage.py compress --force
python /app/manage.py collectstatic --noinput
/usr/local/bin/gunicorn config.wsgi --bind 0.0.0.0:5000 --chdir=/app
并且重建图像一切都很顺利:)
此外,与上述设置不同,我必须在 settings/env 文件中设置 COMPRESS_ENABLED=True
。
我刚刚遇到了同样的问题。
将此添加到 project/compose/production/django/start
python /app/manage.py compress --force
即
python /app/manage.py collectstatic --noinput
python /app/manage.py compress --force
/usr/local/bin/gunicorn config.wsgi --bind 0.0.0.0:5000 --chdir=/app
这很奇怪,但效果很好。
通过 whitenoise 收集和压缩静态文件
python manage.py collectstatic --clear
设置COMPRESS_STORAGE = 'compressor.storage.BrotliCompressorFileStorage' 在 CACHE 目录中制作 .br 文件
python manage.py compress --force
设置COMPRESS_STORAGE = 'compressor.storage.GzipCompressorFileStorage' 在 CACHE 目录中制作 .gz 文件
python manage.py compress --force
将新的压缩文件添加到 whitenoise: manifest.json, manifest.json.gz, manifest.json.br --no-post-process选项是告诉whitenoise不要再次压缩静态文件。
python manage.py collectstatic --no-post-process
确保 运行 命令按顺序执行。
测试白噪声是否有效
python manage.py runserver --nostatic