1

我有一个发送电子邮件的 django 监听器。在正常情况下它工作得很好,但是当它被 AJAX 触发时,我在控制台上看到了这个错误:

[Errno 32] Broken pipe

我正在使用python manage.py runserver对其进行测试,因此控制台上出现错误。

我的怀疑是,因为它只发生在 AJAX POST发生时,它必须与在电子邮件有时间完全发送之前关闭 AJAX 套接字有关,并且当它最终发送时,无处响应去。这听起来可行吗?错误是/usr/lib/python2.6/socket.py在类_fileobject : flush()方法中报告的。

这是侦听器设置的片段:

signals.satchmo_order_status_changed.connect(capture_new_order_listener)

def capture_new_order_listener(sender, oldstatus="", newstatus="", order=None, **kwargs):
    email_notify(order, template = 'shop/email/foo.xt', template_html = 'shop/email/foo.html')

然后我有这个:

def email_notify(order, template='', template_html=''):
    ...
    send_store_mail(subject, c, template, [order.contact.email],
                template_html=template_html, format_subject=True,
                sender=order_confirmation_sender)

AJAX python 处理程序如下所示:

def ajax_update(request, **kwargs):
    order.add_status('New') # Triggers sending an email

AJAX jquery 看起来像这样:

<script src="/static/js/jquery-1.4.2.js" type="text/javascript"></script>
<script>
$(document).ready(function(){
    $("#submit").mousedown(function(){
        $.post("{% url ajax_update %}",
        {
            some_var:$("#some_var").val(),
        },
        function(data,status){
            alert("Data: " + data + "\nStatus: " + status);
        });
    });

});
</script>

我该如何摆脱这个错误?还是我应该忽略它?我不确定它将如何影响 Apache/WSGI 服务器。看来我无法在 send_store_mail() 捕获异常

编辑1:

以下是异常的全文:

----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 36564)
Traceback (most recent call last):
  File "/usr/lib/python2.6/SocketServer.py", line 283, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.6/SocketServer.py", line 309, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.6/SocketServer.py", line 322, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/pymodules/python2.6/django/core/servers/basehttp.py", line 562, in __init__
    BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
  File "/usr/lib/python2.6/SocketServer.py", line 618, in __init__
    self.finish()
  File "/usr/lib/python2.6/SocketServer.py", line 661, in finish
    self.wfile.flush()
  File "/usr/lib/python2.6/socket.py", line 304, in flush
    self._sock.sendall(buffer(data, write_offset, buffer_size))
error: [Errno 32] Broken pipe
----------------------------------------

非常感谢!

4

0 回答 0