gpt4 book ai didi

Django mod_wsgi 内存错误

转载 作者:行者123 更新时间:2023-12-04 12:35:32 27 4
gpt4 key购买 nike

我的 Django 项目中的 MemoryError 有一个奇怪的问题。

  • Ubuntu 11
  • Apache 2
  • Nginx
  • mod_wsgi
  • python2.7

  • 我有一个使用 PIL 调整图像大小的模板标签,并且在我的开发机器上运行良好,但在生产中它会导致大图像(~800px)出现 500 错误。模板标签似乎可以正常工作,但前提是原始图像已经非常小。模板标签是 http://djangosnippets.org/snippets/1944/ 的修改版本

    刚刚尝试为 python2.7 重新编译 mod_wsgi - 同样的错误。

    有没有办法分配更多的内存,或者还有其他我不理解的东西?

    任何帮助将非常感激!

    通过电子邮件发送给我的 Traceback 是:
        Traceback (most recent call last):

    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response
    response = callback(request, *callback_args, **callback_kwargs)

    File "/var/www/rizzyhome.com/www/django/rizzyhome/products/views.py", line 31, in designs
    context_instance=RequestContext(request)

    File "/usr/local/lib/python2.7/dist-packages/django/shortcuts/__init__.py", line 20, in render_to_response
    return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)

    File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 188, in render_to_string
    return t.render(context_instance)

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 123, in render
    return self._render(context)

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 117, in _render
    return self.nodelist.render(context)

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 744, in render
    bits.append(self.render_node(node, context))

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 757, in render_node
    return node.render(context)

    File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 127, in render
    return compiled_parent._render(context)

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 117, in _render
    return self.nodelist.render(context)

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 744, in render
    bits.append(self.render_node(node, context))

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 757, in render_node
    return node.render(context)

    File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 127, in render
    return compiled_parent._render(context)

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 117, in _render
    return self.nodelist.render(context)

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 744, in render
    bits.append(self.render_node(node, context))

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 757, in render_node
    return node.render(context)

    File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 64, in render
    result = block.nodelist.render(context)

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 744, in render
    bits.append(self.render_node(node, context))

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 757, in render_node
    return node.render(context)

    File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 64, in render
    result = block.nodelist.render(context)

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 744, in render
    bits.append(self.render_node(node, context))

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 757, in render_node
    return node.render(context)

    File "/usr/local/lib/python2.7/dist-packages/django/template/defaulttags.py", line 227, in render
    nodelist.append(node.render(context))

    File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 885, in render
    return func(*func_args)

    File "/var/www/rizzyhome.com/www/django/rizzyhome/products/templatetags/yair.py", line 108, in thumbnail
    import Image, ImageOps

    File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 45, in <module>
    __import__("FixTk")

    File "/usr/lib/python2.7/lib-tk/FixTk.py", line 15, in <module>
    import ctypes

    File "/usr/lib/python2.7/ctypes/__init__.py", line 549, in <module>
    CFUNCTYPE(c_int)(lambda: None)

    MemoryError

    编辑:添加代码
    import os, errno

    from django import template
    from django.conf import settings

    register = template.Library()

    def _mkdir_p(path):
    try:
    os.makedirs(path)
    except OSError as exc: # Python >2.5
    if exc.errno == errno.EEXIST:
    pass
    else: raise

    @register.simple_tag
    def thumbnail(image_url, width, height, THIS_ROOT=settings.MEDIA_ROOT, THIS_URL=settings.MEDIA_URL, img_w=None, img_h=None, method="crop"):
    """
    Given the url to an image, resizes the image using the given width and
    height on the first time it is requested, and returns the url to the new
    resized image. If width or height are zero then the original ratio is
    maintained.
    """

    if not img_w:
    img_w = width

    if not img_h:
    img_w = height

    image_url = unicode(image_url)

    # determine new paths
    resized_image_reduced = os.path.join('_resized_', image_url.replace(THIS_ROOT, ''))

    file_name, file_ext = os.path.basename(resized_image_reduced).split(os.extsep)
    resized_image_absolute_path = os.path.join(
    THIS_ROOT,
    os.path.dirname(resized_image_reduced),
    u'%s__%05d-%05d_%s%s%s' % (file_name, width, height, method, os.extsep, file_ext)
    )
    resized_image_relative_url = os.path.join(
    THIS_URL,
    os.path.dirname(resized_image_reduced),
    u'%s__%05d-%05d_%s%s%s' % (file_name, width, height, method, os.extsep, file_ext)
    )

    # make sure target directory exists
    _mkdir_p(os.path.realpath(os.path.dirname(resized_image_absolute_path)))

    # abort if thumbnail exists, original image doesn't exist, invalid width or
    # height are given, or PIL not installed, or thumbnail is newer than source image
    if os.path.exists(resized_image_absolute_path):
    if os.path.exists(image_url):
    if os.path.getmtime(resized_image_absolute_path) > os.path.getmtime(image_url):
    return resized_image_relative_url
    else:
    return resized_image_relative_url
    if not image_url:
    return ""

    try:
    width = int(width)
    height = int(height)
    except ValueError:
    return resized_image_relative_url

    if not os.path.exists(image_url) or (width == 0 and height == 0):
    return image_url

    try:
    from PIL import Image, ImageOps
    except ImportError:
    return resized_image_relative_url

    # open image, determine ratio if required and resize/crop/save
    image = Image.open(image_url)
    if width == 0:
    width = image.size[0] * height / image.size[1]
    elif height == 0:
    height = image.size[1] * width / image.size[0]
    if image.mode not in ("L", "RGB"):
    image = image.convert("RGB")

    try:
    if method == 'scale':

    image.thumbnail((width, height), Image.ANTIALIAS)


    new_w, new_h = image.size

    x1 = (img_w-new_w) /2
    y1 = (img_h-new_h)

    new_image = Image.new(image.mode, (img_w, img_h), (255,255,255))
    new_image.paste(image, (x1,y1))

    new_image.save(
    resized_image_absolute_path,
    "JPEG",
    quality=100
    )

    elif method == 'crop':
    image = ImageOps.fit(image, (width, height), Image.ANTIALIAS)
    image.save(
    resized_image_absolute_path,
    "JPEG",
    quality=100
    )

    except Exception, e:
    raise
    return resized_image_relative_url

    return resized_image_relative_url

    最佳答案

    非常感谢您的评论和提供帮助。

    显然 __init__.py 中有一个奇怪的错误。对于 CTYPE 模块。 - 或者其他什么,我刚读过它:)

    至少对我来说,解决方法是注释掉 __init__.py 中的最后一行。文件。似乎最后一行是专门针对 Windows 64 位的,并且弄乱了我的 Ubuntu。

    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=598727#38

    关于Django mod_wsgi 内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10222538/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com