Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nested BundleError: file does not exist #217

Closed
max-arnold opened this issue Mar 5, 2013 · 3 comments
Closed

Nested BundleError: file does not exist #217

max-arnold opened this issue Mar 5, 2013 · 3 comments

Comments

@max-arnold
Copy link

We get exceptions on production server (they typically get away after apache restart) related to bundle resolver. Somehow the nested bundle name ends up being used as file name.

Settings:

ASSETS_DEBUG = False
ASSETS_AUTO_BUILD = False
ASSETS_CACHE = False
ASSETS_ROOT = os.path.join(PROJECT_PATH, 'webassets')
ASSETS_MANIFEST = 'json:' + os.path.join(PROJECT_PATH, 'webassets/webassets_manifest.json')

Bundle definition:

from django_assets import Bundle, register

base_css = Bundle('bootstrap/css/bootstrap.min.css', 'css/new_base.css', 'css/chosen.css', output='gen/base.css')
open_css = Bundle(base_css, 'css/new_open.css', output='gen/open.css')
brand_gallery_css = Bundle(open_css,'css/gallery/style.css', 'css/gallery/elastislide.css', output='gen/gallery.css')
user_photo_css = Bundle(open_css, fileupload_css,'css/user_image_upload.css', output="gen/user_photo.css")

register('base_css',base_css)
register('open_css',open_css)
register('brand_gallery_css',brand_gallery_css)
register('user_photo_css',user_photo_css)

Traceback:

Traceback (most recent call last):
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 255, in __call__
    response = self.get_response(request)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/core/handlers/base.py", line 178, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/core/handlers/base.py", line 224, in handle_uncaught_exception
    return callback(request, **param_dict)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/utils/decorators.py", line 91, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/views/defaults.py", line 41, in server_error
    return http.HttpResponseServerError(template.render(Context({})))
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 140, in render
    return self._render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 830, in render
    bit = self.render_node(node, context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 844, in render_node
    return node.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/loader_tags.py", line 124, in render
    return compiled_parent._render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 830, in render
    bit = self.render_node(node, context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 844, in render_node
    return node.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/loader_tags.py", line 124, in render
    return compiled_parent._render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 830, in render
    bit = self.render_node(node, context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 844, in render_node
    return node.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/loader_tags.py", line 63, in render
    result = block.nodelist.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 830, in render
    bit = self.render_node(node, context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 844, in render_node
    return node.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django_assets/templatetags/assets.py", line 69, in render
    for url in bundle.urls(env=get_env()):
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/webassets/bundle.py", line 681, in urls
    urls.extend(bundle._urls(env, extra_filters, *args, **kwargs))
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/webassets/bundle.py", line 650, in _urls
    for org, cnt in self.resolve_contents(env):
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/webassets/bundle.py", line 148, in resolve_contents
    raise BundleError(e)
BundleError: '/var/www/example.com/src/webassets/open_css' does not exist

The actual traceback hidden behind try/except is below:

Traceback (most recent call last):
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 255, in __call__
    response = self.get_response(request)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/core/handlers/base.py", line 178, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/core/handlers/base.py", line 224, in handle_uncaught_exception
    return callback(request, **param_dict)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/utils/decorators.py", line 91, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/views/defaults.py", line 41, in server_error
    return http.HttpResponseServerError(template.render(Context({})))
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 140, in render
    return self._render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 830, in render
    bit = self.render_node(node, context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 844, in render_node
    return node.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/loader_tags.py", line 124, in render
    return compiled_parent._render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 830, in render
    bit = self.render_node(node, context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 844, in render_node
    return node.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/loader_tags.py", line 124, in render
    return compiled_parent._render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 830, in render
    bit = self.render_node(node, context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 844, in render_node
    return node.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/loader_tags.py", line 63, in render
    result = block.nodelist.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 830, in render
    bit = self.render_node(node, context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django/template/base.py", line 844, in render_node
    return node.render(context)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django_assets/templatetags/assets.py", line 69, in render
    for url in bundle.urls(env=get_env()):
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/webassets/bundle.py", line 682, in urls
    return urls
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/webassets/bundle.py", line 651, in _urls
    if isinstance(cnt, Bundle):
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/webassets/bundle.py", line 145, in resolve_contents
    try:
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/webassets/env.py", line 272, in resolve_source
    return self.search_for_source(item)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/django_assets/env.py", line 136, in search_for_source
    return Resolver.search_for_source(self, item)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/webassets/env.py", line 208, in search_for_source
    return self.search_env_directory(item)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/webassets/env.py", line 171, in search_env_directory
    return self.consider_single_directory(self.env.directory, item)
  File "/var/www/virtualenvs/example.com/lib/python2.7/site-packages/webassets/env.py", line 165, in consider_single_directory
    raise IOError("'%s' does not exist" % expr)
IOError: '/var/www/example.com/src/webassets/open_css' does not exist
@max-arnold
Copy link
Author

I added bundle print statement to django_assets/templatetags/assets.py:

    def render(self, context):
        bundle = self.resolve(context)

        print bundle
        result = u""
        for url in bundle.urls(env=get_env()):
            context.update({'ASSET_URL': url})
            try:
                result += self.childnodes.render(context)
            finally:
                context.pop()
        return result

And the output was <Bundle output=None, filters=(), contents=(u'open_css',)>

This is not always reproducible and after apache restart all printed bundles look as usual.

@max-arnold
Copy link
Author

It looks like there are some problems with environment:

        def resolve_bundle(name):
            # If a bundle with that name exists, use it. Otherwise,
            # assume a filename is meant.
            try:
                return get_env()[name]
            except KeyError:
                print "FILENAME:", name
                return name

It can't find budle in the environment and prints FILENAME: open_css

@max-arnold
Copy link
Author

The issue seems to be caused by non thread-safe code in django-assets: miracle2k/django-assets#12

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant