django-imagekit: "The storage backend did not save the file" warnings and "IOError: [Errno 2] No such file or directory"

Hello. I came across a problem with imagekit. I see a lot of warnings in Sentry from _generate method of ImageCacheFile - “The storage backend %s did not save the file with the requested name (”%s") and instead used “%s”". Also I have even more errors “IOError: [Errno 2] No such file or directory:”

IOError: [Errno 2] No such file or directory: u'/home/user/plitka/3dplitka/plitka/media/CACHE/images/images/tiles/images/europa-ceramica/dube/dec-angeles-dekor-01-20x50.a469216b4a05.jpeg'

Stacktrace (most recent call last):

  File "django/core/handlers/base.py", line 109, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "newrelic/hooks/framework_django.py", line 485, in wrapper
    return wrapped(*args, **kwargs)
  File "django/views/decorators/csrf.py", line 77, in wrapped_view
    return view_func(*args, **kwargs)
  File "plitka/catalog/views.py", line 868, in ajax_search
    style = 'style="margin: %dpx %dpx"' % ((82 - image.height) / 2, (82 - image.width) / 2)
  File "django/core/files/images.py", line 19, in _get_height
    return self._get_image_dimensions()[1]
  File "django/core/files/images.py", line 25, in _get_image_dimensions
    self.open()
  File "imagekit/files.py", line 58, in open
    self._require_file()
  File "imagekit/cachefiles/__init__.py", line 62, in _require_file
    self._file = self.storage.open(self.name, 'rb')
  File "django/core/files/storage.py", line 33, in open
    return self._open(name, mode)
  File "django/core/files/storage.py", line 155, in _open
    return File(open(self.path(name), mode))

This errors raises randomly, on different pages in small percent of requests . And if I reload same page right after error everything will be ok. There is no errors in my local devserver. Looks like some race condition situation. Here is different traceback:

IOError: [Errno 2] No such file or directory: u'/home/user/plitka/3dplitka/plitka/media/CACHE/images/santehnika/gemelli/glass-2/22684/gemelli-glass-2-glass-console-90-podvesnaya-colorglass.7017f7db9e2d.JPG'

Stacktrace (most recent call last):

  File "django/core/handlers/base.py", line 134, in get_response
    response = response.render()
  File "django/template/response.py", line 104, in render
    self._set_content(self.rendered_content)
  File "django/template/response.py", line 81, in rendered_content
    content = template.render(context)
  File "django/template/base.py", line 140, in render
    return self._render(context)
  File "newrelic/api/function_trace.py", line 79, in dynamic_wrapper
    return wrapped(*args, **kwargs)
  File "django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "django/template/base.py", line 823, in render
    bit = self.render_node(node, context)
  File "django/template/base.py", line 837, in render_node
    return node.render(context)
  File "django/template/loader_tags.py", line 123, in render
    return compiled_parent._render(context)
  File "newrelic/api/function_trace.py", line 79, in dynamic_wrapper
    return wrapped(*args, **kwargs)
  File "django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "django/template/base.py", line 823, in render
    bit = self.render_node(node, context)
  File "django/template/base.py", line 837, in render_node
    return node.render(context)
  File "django/template/loader_tags.py", line 123, in render
    return compiled_parent._render(context)
  File "newrelic/api/function_trace.py", line 79, in dynamic_wrapper
    return wrapped(*args, **kwargs)
  File "django/template/base.py", line 134, in _render
    return self.nodelist.render(context)
  File "django/template/base.py", line 823, in render
    bit = self.render_node(node, context)
  File "django/template/base.py", line 837, in render_node
    return node.render(context)
  File "newrelic/hooks/framework_django.py", line 685, in wrapper
    return wrapped(*args, **kwargs)
  File "django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "django/template/base.py", line 823, in render
    bit = self.render_node(node, context)
  File "django/template/base.py", line 837, in render_node
    return node.render(context)
  File "django/template/base.py", line 874, in render
    output = self.filter_expression.resolve(context)
  File "django/template/base.py", line 571, in resolve
    obj = self.var.resolve(context)
  File "django/template/base.py", line 721, in resolve
    value = self._resolve_lookup(context)
  File "django/template/base.py", line 754, in _resolve_lookup
    current = getattr(current, bit)
  File "django/core/files/images.py", line 15, in _get_width
    return self._get_image_dimensions()[0]
  File "django/core/files/images.py", line 25, in _get_image_dimensions
    self.open()
  File "imagekit/files.py", line 58, in open
    self._require_file()
  File "imagekit/cachefiles/__init__.py", line 62, in _require_file
    self._file = self.storage.open(self.name, 'rb')
  File "django/core/files/storage.py", line 33, in open
    return self._open(name, mode)
  File "django/core/files/storage.py", line 155, in _open
    return File(open(self.path(name), mode))

I’m using Imagekit 3.2.4 with Django 1.4.14. This is my imagekit settings: IMAGEKIT_SPEC_CACHEFILE_NAMER = ‘imagekit.cachefiles.namers.source_name_dot_hash’

This is my imagegenerators:

from imagekit import ImageSpec, register
from imagekit.processors import ResizeToFit, ResizeToFill


class ProductBigThumbnail(ImageSpec):
    processors = [ResizeToFit(290, 290, mat_color='white')]
    format = 'JPEG'
    options = {
        'quality': 95,
        'optimize': True,
        'progressive': True,
    }


class ProductThumbnail(ImageSpec):
    processors = [ResizeToFit(65, 65, mat_color='white')]
    format = 'JPEG'
    options = {
        'quality': 95,
        'optimize': True,
        'progressive': True,
    }


class ProductCardThumbnail(ImageSpec):
    processors = [ResizeToFit(180, 180, mat_color='white')]
    format = 'JPEG'
    options = {
        'quality': 95,
        'optimize': True,
        'progressive': True,
    }


class ProductCartThumbnail(ImageSpec):
    processors = [ResizeToFit(100, 100, mat_color='white')]
    format = 'JPEG'
    options = {
        'quality': 95,
        'optimize': True,
        'progressive': True,
    }


register.generator('plumbing:product_big_thumb', ProductBigThumbnail)
register.generator('plumbing:product_thumb', ProductThumbnail)
register.generator('plumbing:product_card_thumb', ProductCardThumbnail)
register.generator('plumbing:product_cart_thumb', ProductCartThumbnail)

Here’s how I use its in templates:

{% generateimage 'plumbing:product_thumb' source=component.to_product.get_image as thumb %}
<img src="{{ thumb.url }}" width="{{ thumb.width }}" height="{{ thumb.height}}">

Also I have this function for generating thumbnails in views:

from imagekit.cachefiles import ImageCacheFile
from imagekit.registry import generator_registry
from imagekit.templatetags.imagekit import DEFAULT_THUMBNAIL_GENERATOR


def make_thumbnail(source, width, height, generator_id=None):
    if generator_id is None:
        generator_id = DEFAULT_THUMBNAIL_GENERATOR
    kwargs = {
        'source': source,
        'width': width,
        'height': height,
    }
    generator = generator_registry.get(generator_id, **kwargs)
    return ImageCacheFile(generator)

I use this function like here, where get_image function returns value of ImageField:

image = make_thumbnail(it.get_image(), 82, 82)
style = 'style="margin: %dpx %dpx"' % ((82 - image.height) / 2, (82 - image.width) / 2)

Could you tell me why warnings are happens? What is the possible cause of this warnings and errors?

About this issue

  • Original URL
  • State: open
  • Created 9 years ago
  • Comments: 24 (8 by maintainers)

Most upvoted comments

@idealatom LOL. Я 3дплитку когда-то в году 12 переделывал импортилки товаров из экселя.