lemonsaurus / django-simple-bulma

Django application to add the Bulma CSS framework and its extensions
MIT License
137 stars 17 forks source link

Failure in prod with Whitenoise and disabled bulma addons #22

Closed gdude2002 closed 4 years ago

gdude2002 commented 5 years ago

I'm not releasing to prod yet, but I figured I'd check what happens when I attempt to run my site in production. It turns out that django-simple-bulma appears to be trying to insert <script> tags for modules I don't actually have enabled, which results in a 500 error from Whitenoise.

In my settings.py:

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

# ...

BULMA_SETTINGS = {
    "extensions": [
        # Layout extensions
        "bulma-divider",

        # Form extensions
        "bulma-checkradio",
        "bulma-iconpicker",
        "bulma-slider",
        "bulma-switch",
        "bulma-tagsinput",

        # Element extensions
        "bulma-badge",
        "bulma-tooltip",

        # Component extensions
        "bulma-steps",

        # Bundled extensions
        "bulma-fileupload",
        "bulma-navbar-burger",
        "bulma-notifications",
    ],

    "variables": {
        "primary": "#7289DA",
        "link": "$primary",
    }
}

This results in a 500 error when DEBUG is False, and the following traceback in the debug log:

Internal Server Error: /
Traceback (most recent call last):
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 156, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 154, in _get_response
    response = response.render()
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/template/response.py", line 106, in render
    self.content = self.rendered_content
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/template/response.py", line 83, in rendered_content
    content = template.render(context, self._request)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/template/base.py", line 171, in render
    return self._render(context)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/template/base.py", line 163, in _render
    return self.nodelist.render(context)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render
    bit = node.render_annotated(context)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated
    return self.render(context)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/template/base.py", line 163, in _render
    return self.nodelist.render(context)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/template/base.py", line 937, in render
    bit = node.render_annotated(context)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/template/base.py", line 904, in render_annotated
    return self.render(context)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/template/library.py", line 192, in render
    output = self.func(*resolved_args, **resolved_kwargs)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django_simple_bulma/templatetags/django_simple_bulma.py", line 41, in bulma
    js_file = static(f"js/{filename.name}")
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py", line 19, in static
    return _static(path)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/templatetags/static.py", line 167, in static
    return StaticNode.handle_simple(path)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/templatetags/static.py", line 118, in handle_simple
    return staticfiles_storage.url(path)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/contrib/staticfiles/storage.py", line 152, in url
    return self._url(self.stored_name, name, force)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/contrib/staticfiles/storage.py", line 131, in _url
    hashed_name = hashed_name_func(*args)
  File "/home/gdude/PycharmProjects/gserv.me/.venv/lib/python3.7/site-packages/django/contrib/staticfiles/storage.py", line 419, in stored_name
    raise ValueError("Missing staticfiles manifest entry for '%s'" % clean_name)
ValueError: Missing staticfiles manifest entry for 'js/bulma-accordion.js'
"GET / HTTP/1.1" 500 27

As you can see, I don't actually have bulma-accordion enabled, so it is indeed not in that manifest. The question is why django-simple-bulma is still attempting to make use of it.

I don't have time right at this moment to investigate it myself, but I'll attempt to dig around and fix it if I have time to later on.

gdude2002 commented 5 years ago

It's worth noting that this doesn't happen with DEBUG = True.

lemonsaurus commented 4 years ago

I'm pretty sure this has been solved, although I'm not sure exactly which commit that fixed it. Gonna close this for now.