From 5899c1f14f3559d1fbff62a3f02e869bf79ebf30 Mon Sep 17 00:00:00 2001 From: Ryan Westfall Date: Tue, 7 Jul 2026 13:10:51 -0500 Subject: [PATCH] fix(static): tolerate missing asset references in collectstatic WhiteNoise's manifest storage strictly resolves every referenced file during collectstatic, including sourceMappingURL comments in vendored JS bundles. A missing .map (financial/js/.../dashboard-free.js.map) broke the prod container at startup. Add TolerantManifestStaticFilesStorage which leaves unresolved references untouched instead of raising. Co-authored-by: Cursor --- company_site/company_site/settings/base.py | 2 +- company_site/company_site/storage.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 company_site/company_site/storage.py diff --git a/company_site/company_site/settings/base.py b/company_site/company_site/settings/base.py index 011475c..a48a105 100644 --- a/company_site/company_site/settings/base.py +++ b/company_site/company_site/settings/base.py @@ -147,7 +147,7 @@ STATIC_URL = "static/" STATIC_ROOT = BASE_DIR / "staticfiles" STORAGES = { "staticfiles": { - "BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage", + "BACKEND": "company_site.storage.TolerantManifestStaticFilesStorage", }, } diff --git a/company_site/company_site/storage.py b/company_site/company_site/storage.py new file mode 100644 index 0000000..3f4de45 --- /dev/null +++ b/company_site/company_site/storage.py @@ -0,0 +1,20 @@ +"""Custom static files storage. + +WhiteNoise's manifest storage post-processes JS/CSS during ``collectstatic`` and +strictly resolves every referenced file, including ``sourceMappingURL`` comments +in vendored bundles. Some third-party assets reference ``.map`` files that are +not shipped, which makes ``collectstatic`` fail hard. + +``TolerantManifestStaticFilesStorage`` leaves such unresolved references +untouched instead of raising, so a missing source map can't break the build. +""" + +from whitenoise.storage import CompressedManifestStaticFilesStorage + + +class TolerantManifestStaticFilesStorage(CompressedManifestStaticFilesStorage): + def _stored_name(self, name, hashed_files): + try: + return super()._stored_name(name, hashed_files) + except ValueError: + return name