我有一个发送电子邮件的 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
----------------------------------------
非常感谢!