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