ホワイトノイズと圧縮された静的ファイル (libsass を含む) を使用して django プロジェクトを実行することができません。以下のリンクで、必要な静的ファイルをオフラインで圧縮することによってのみ可能であると読みました。しかし、dockerコンテナを起動すると、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 でビルドします。以下の完全なコード ベースのリンクを参照してください)。
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
考えられる関連リンク:
- Whitenoise と django-compressor により、圧縮ファイルで 404 が発生する
- Django-Compressor で WhiteNoise を使用できますか?
- HerokuでDjangoの静的ファイルが見つからない(ホワイトノイズあり)
- https://github.com/django-compressor/django-compressor/issues/486
編集
Justinsの回答を使用して解決しました(以下を参照してください。追加の変更があります)。私の間違いは、既に実行中のコンテナーでファイルを圧縮しようとしたことで、上記のエラーが発生しました。次の行で Dockerfile を変更した後 (コマンドが重複していることに注意してくださいcollectstatic
!):
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
イメージの再構築はすべて魅力的に機能しました:)さらに、上記の設定から逸脱してCOMPRESS_ENABLED=True
、設定/環境ファイルに設定する必要がありました。