Frage

Ich bin mit der Entwicklung Django 1.2-Server und ich diese Rohrbruch Fehlermeldungen bekommen, wenn ich eine Seite von ihm mit Chrome oder Safari laden. Mein Mitarbeiter ist immer den Fehler auch wenn er eine Seite von seinem Entwickler-Server lädt. Wir haben nicht diese Fehler, wenn Opera oder 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

Kann mir jemand helfen aus? Ich werde verrückt über das!

War es hilfreich?

Lösung

Dies ist kein Django Problem. Ihr Browser ist höchstwahrscheinlich etwas fehlerhaft zu tun.

  

Dieses gemeinsame Fehler, der passiert,   wenn Ihr Browser schließt die   Verbindung während der dev-Server   noch damit beschäftigt, das Senden von Daten.

Überprüfen Sie dieses Django Ticket für weitere Informationen.

Andere Tipps

Ich lief vor kurzem in diese Ausgabe mit dem django v1.1.1 Dev-Server und Chrome 7.0.517.44.

Die „fix“, dass ich entdeckt habe, ist immer eine harte refresh tun (halten die Umschalttaste gedrückt und klicken Sie auf die Reload-Button in Chrome) auf der Seite nach der ersten Last, die Chrome verursacht es den Cache zu ignorieren für alle Ressourcen, die von der angeforderten refresh.

Als solches führt dies mich ist es ein Problem mit Chrome berüchtigt Tendenz zu Cache, alles zu glauben, dass es nur kann; auch wenn es nicht sollte. Meine Vermutung ist, dass Chrome eine Ressourcenanforderung macht und dann sofort fällt die Verbindung für die Ressource, sobald sie realisiert sie die Ressource im Cache gespeichert.

Das wäre fast eine erträglich Abhilfe, außer irgendwelche AJAX-Anforderungen wird immer noch zu Problemen führen.

Dies kann in der JavaScript-Funktion aufgrund eines Fehlers, den Ajax-Aufruf Dispatching.

Zum Beispiel kann die Funktion durch einen Klick Ereignis auf einem Link ausgelöst werden, und wenn die Standardaktion der Verbindung nicht verhindert wird, erhalten Sie eine sekundäre Anfrage erhalten sofort und der Browser wird die vorherige Verbindung schließt für die ohne Wartezeit Antwort bis Ende. Ich hatte das gleiche Problem, wenn ich vergessen return false an den Ereignishandler hinzuzufügen.

Das gleiche Symptom kann auftreten, wenn das Handler Ereignis ausgelöst Ajax eine Ausnahme auslöst.

Debug sorgfältig die Funktion macht die Ajax-Anforderung und den Rückgabewert dieser Funktion.

Rohrbruch geschieht, wenn der Browser eine Verbindung mit dem Server geschlossen wird. Dieses Problem passiert mit mir, bevor sie auf Ajax Post-Anforderung mit <a href="... verbunden, weil ich vergessen e.preventDefault() in der Klick-Handler-Funktion hinzuzufügen. Also, was passiert ist, dass der Browser die Post-Anforderung senden und die Verbindung schließen und eine andere Erhaltungs-Anforderung senden. So mögen Sie die Post-Anforderung vom Browser wurde abgebrochen sehen.

Ich hatte ein möglicherweise damit zusammenhängendes Problem.

Bei der Verwendung von Safari und Chrome unter Windows, auf meinem lokalen Rechner auf meinem django runserver, einig Ansichten wurden zufällig keine Antwort auf Ajax POST-Anfragen zurück.

Die Lösung war:

Die Daten-I wurde in über POST zur Ansicht vorbei war nur ein Schlüssel / val Paar: „action = Entfernen“. Nun war ich nicht wirklich mit diesen Daten aus meiner Sicht. Sobald ich die Daten in eine var meiner Ansicht zugeordnet ist, (das heißt foo = request.POST [ ‚action‘]), würde die Ansicht jedes Mal eine Antwort auf AJAX-Anfragen zurück.

Absolut verrückt!

In dem Fall, dass dies mit einem JavaScript Client geschieht, könnte eine Lösung die folgende sein. Sie müssen preventDefault und return false am Anfang und am Ende Ihrer Ereignishandler hinzufügen wie:

$('#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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top