Opened 3 years ago

Closed 3 years ago

#33324 closed Uncategorized (needsinfo)

Missing static file errors with manifest storage are particularly hard to debug (no error email)

Reported by: Michael Owned by: nobody
Component: contrib.staticfiles Version: 3.2
Severity: Normal Keywords: static manifest storage
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Michael)

Normally when there is an error, an email is sent about the error. However is there is a missing static file, and django.contrib.staticfiles.storage.ManifestStaticFilesStorage tries to calc the static URL, it falls over in an incredibley hard way to debug. If your error pages require the missing static file, that is even harder.

Please consider sending an error email to the support email address if this kind of error occurs.
Its raised in: contrib/staticfiles/storage.py line 417:

    def stored_name(self, name):
        parsed_name = urlsplit(unquote(name))
        clean_name = parsed_name.path.strip()
        hash_key = self.hash_key(clean_name)
        cache_name = self.hashed_files.get(hash_key)
        if cache_name is None:
            if self.manifest_strict:
                raise ValueError("Missing staticfiles manifest entry for '%s'" % clean_name)

Side note: mange.py sendtestemail is working, so its not an email setup issue.

As a temp fix I subclassed the storage:

from django.contrib.staticfiles.storage import ManifestStaticFilesStorage

class ManifestStaticFilesWith404Storage(ManifestStaticFilesStorage):
    """If you have a manifest files error, the page to render the error probably
    has the same error, and then you can't debug it. This returns the error
    string so one can see in the rendered html there was a problem
    """
    def stored_name(self, name):
        try:
            return super().stored_name(name)
        except ValueError as e:
            return f"{name}.could_not_find_static_file_to_calc_manifest_hash"

Change History (5)

comment:1 by Michael, 3 years ago

Summary: Missing static file errors are particularly hard to debug (no error email)Missing static file errors with manifest storage are particularly hard to debug (no error email)

comment:2 by Michael, 3 years ago

Description: modified (diff)

comment:3 by Michael, 3 years ago

Description: modified (diff)

comment:4 by Michael, 3 years ago

Description: modified (diff)

comment:5 by Carlton Gibson, 3 years ago

Resolution: needsinfo
Status: newclosed

Hi Michael.

I'm likely being slow here but, I'm struggling to see exactly what the issue is you're encountering here.

I'm expecting manifest errors to come up during the collectstatic run, rather than in the request-response cycle.
Also, debug error pages are only used when DEBUG=True, so exactly when file names are not hashed.

Can you put a sample project together that shows the issue exactly? — It's much easier if I can see it in play, rather than trying to guess what you're seeing.
Thanks!

Note: See TracTickets for help on using tickets.
Back to Top