django + webkit =壊れたパイプ
-
01-10-2019 - |
質問
Django 1.2 Development Serverを実行しています。ChromeまたはSafariでページをロードするたびに、これらの壊れたパイプエラーメッセージが表示されます。私の同僚は、彼が開発者サーバーからページをロードするときにもエラーを取得しています。 OperaまたはFirefoxを使用する場合、これらのエラーはありません。
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 281, in run self.finish_response()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 321, in finish_response self.write(data)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 417, in write self._write(data)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 300, in write self.flush()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/socket.py", line 286, in flush self._sock.sendall(buffer)
error: [Errno 32] Broken pipe
誰かが私を助けることができますか?私はこれに夢中になります!
解決
これはDjangoの問題ではありません。ブラウザは、おそらく何か誤ったことをしている可能性が高いです。
これは、DEVサーバーがまだデータの送信に忙しい間にブラウザが接続を閉じるたびに発生する一般的なエラーです。
小切手 このDjangoチケット 詳細については。
他のヒント
私は最近、Django V1.1.1 Dev ServerとChrome 7.0.517.44でこの問題に出くわしました。
私が発見した「修正」は、常にハードリフレッシュ(シフトを押し、Chromeのリロードボタンをクリックします)を最初のロード後に行うことです。
そのため、これは、可能な限りすべてをキャッシュするというChromeの悪名高い傾向の問題であると信じています。そうすべきではないときでさえ。私の推測では、Chromeがリソースリクエストを行っていて、リソースがキャッシュされていることに気付いたら、すぐにそのリソースの接続をドロップしていると思います。
これは、Ajaxリクエストが依然として問題を引き起こすことを除いて、ほとんど耐え難い回避策になります。
これは、ajaxコールを発送するJavaScript関数のエラーが原因である可能性があります。
たとえば、リンク上のクリックイベントによって関数がトリガーされる場合があり、リンクのデフォルトアクションが防止されない場合、すぐにセカンダリリクエストが表示され、ブラウザは応答が終了するのを待つことなく以前の接続を閉じます。 。追加するのを忘れたとき、私は同じ問題を抱えていました return false
イベントハンドラーに。
Ajaxをトリガーするイベントハンドラーが例外をスローする場合、同じ症状が発生する可能性があります。
Ajax要求とその関数の返品値を作成する関数を注意深くデバッグします。
ブラウザがサーバーとの接続を閉じると、壊れたパイプが発生します。この問題は、以前にAJAXのPOSTリクエストに関連して私に起こりました <a href="...
追加するのを忘れたからです e.preventDefault()
クリックハンドラー機能で。したがって、何が起こったのかは、ブラウザがPOSTリクエストを送信して接続を閉じて別のGETリクエストを送信することです。したがって、投稿リクエストがブラウザによってキャンセルされたように見えます。
関連する可能性のある問題がありました。
WindowsでSafariとChromeを使用している間、Django Runserverで私のローカルマシンで、 いくつかの ビューは、Ajax Postリクエストへの応答をランダムに返していませんでした。
解決策はこれでした:
私が投稿を介してビューに渡されたデータは、1つのキー/VALペア「アクション=削除」でした。今、私は実際に私の見解ではこのデータを使用していませんでした。私のビューでデータをVARに割り当てると(つまり、foo = request.post ['action'])、ビューは毎回ajaxリクエストへの応答を返します。
絶対にクレイジー!
これがで起こる場合 JavaScript
クライアント、解決策は次のとおりです。追加する必要があります preventDefault
と return false
イベントハンドラーの最初と最後に:
$('#btn_analyze').click(function(e) {
e.preventDefault()
$.post('/api/v1/analyzer/',
data,
"json").done(function(response) {
//...
}).fail(function() {
Logger.error(" Error ")
})
return false
}) // analyze click