メールを送信する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
----------------------------------------
どうもありがとう!