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)
@idealatom LOL. Я 3дплитку когда-то в году 12 переделывал импортилки товаров из экселя.