2010-12-29 7 views
38

Was könnte diesen Fehler verursachen:Warum kann mod_wsgi keine Daten schreiben? IOError: failed Daten schreiben

$ sudo tail -n 100 /var/log/apache2/error.log‘

[Wed Dec 29 15:20:03 2010] [error] [client 220.181.108.181] mod_wsgi (pid=20343): Exception occurred processing WSGI script '/home/username/public_html/idm.wsgi'. 
[Wed Dec 29 15:20:03 2010] [error] [client 220.181.108.181] IOError: failed to write data 

Hier wird das WSGI Skript ist:

$ cat public_html/idm.wsgi 
import os 
import sys 

sys.path.append('/home/username/public_html/IDM_app/') 

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

import django.core.handlers.wsgi 

application = django.core.handlers.wsgi.WSGIHandler() 

Warum würde Django nicht in der Lage sein, Daten zu schreiben?

Ich bin mit Django 1.2.4

+0

Verwandte helfen: http: //stackoverflow.com/a/7089413/633961 – guettli

Antwort

-4

ich es bin Wetten ist ein Berechtigungsproblem. True macht das Zielverzeichnis/die Datei universell beschreibbar. Dann machen Sie die Datei Ihrer www-Datengruppe (oder was auch immer Ihr Apache-Benutzer ist), machen Sie sie schreibbar und stellen Sie sicher, dass nichts in diesem Ordner empfindlich ist, da dies ein Sicherheitsproblem sein könnte.

26

Dieser Fehler, ohne jede Art von Zurückverfolgungs Python kann eine Variation der Ausgabe beschrieben werden:

http://code.google.com/p/modwsgi/issues/detail?id=29&can=1

Das geschieht, wenn HTTP-Client-Verbindung unterbrochen wird, bevor die vollständige Antwort zurück geschrieben werden kann vom Webserver. Sie kann sich als "geschlossene Clientverbindung", "konnte keine Daten schreiben" oder "Fehler beim Löschen von Daten" als IOError im Apache-Fehlerprotokoll manifestieren. Dh, von der WSGI-Anwendung nicht gesehen, da das Schreiben von Daten erfolgt, nachdem die WSGI-Anwendung zurückgegeben wurde, und daher die Ausnahme nicht zurück an die Anwendung senden kann, mit der sie etwas anfangen kann.

Die Frage ist, ob Sie eine Fehlermeldung von Django erhalten, wenn Sie Fehler konfigurieren, die Ihnen in E-Mails gesendet werden. Wenn Sie das tun, dann ist stattdessen etwas in Django passiert.

+0

Aber wie es zu lösen? In meiner Anwendung scheint es sich um send_mail zu handeln (was lange dauert) ... – gabn88

+1

Es hat keinen Sinn, eine vage Frage mit keinen spezifischen Informationen über Ihren Fall zu einem bestehenden Follow-up zu einer anderen Frage hinzuzufügen. Deine Situation könnte komplett anders sein. Erstellen Sie eine neue Frage, die Ihr Problem im Detail erklärt. –

+0

Es tut mir leid, aber ich habe den gleichen Fehler, und ich konfigurierte Django, um E-Mails zu senden, bekam aber keine Mail. In meinem Fall war das Problem, dass ich mein SMTP-Postfach-Passwort änderte, ohne es in Django zu ändern. Könnte jemandem in der Zukunft helfen, der nach dem gleichen Problem sucht wie ich ... Kein Mittel, jemandem Schaden zuzufügen! – gabn88

5

Ich habe das gleiche Problem in einer Anwendung, die viele AJAX-Aufrufe (mod_wsgi 3.3) verwendet. Gibt es dafür eine bekannte Lösung? Ich dachte darüber nach, die Ausnahme zu ignorieren, aber das ist normalerweise keine gute Idee.

UPDATE

Eigentlich kann dies auf mehrere Dinge sein, aber die wahrscheinlichste Ursache ist, dass Sie die write Rückruf statt yield sich an Ihren Ausgang verwenden.

Ich glaube, das wird helfen:

http://groups.google.com/group/modwsgi/browse_thread/thread/c9cc1307bc10cfff

+1

Wird entweder mit schreiben oder geben, macht keinen Unterschied. Django verwendet keine Nur-Schreibe-Ausbeute. Wenn write verwendet würde, würde sich der Fehler wieder in die WSGI-Anwendung ausbreiten und die Anwendung würde sie wahrscheinlich abfangen und in eine 500 konvertieren, ohne dass sie protokolliert wird. Für die Ausbeute ist es mod_wsgi Schreiben der Daten und keine Möglichkeit, Fehler zur Anwendung zu propagieren, so mod_wsgi protokolliert Fehler ohne Traceback als nicht im Kontext der Anwendung. –

0

ich das gleiche Problem mit meinem Python-Web-App in der digitalen Ozean gefunden habe und nach der Protokolldatei überprüft ernsthaft habe ich entdeckt, dass es ein Problem aufgetreten mit meiner Datenbank mysql! Das Problem lag an der Tatsache, dass ich Speicher (RAM) leergelaufen Also überprüfen Sie diese Frage und das Problem zu lösen!

`For Mysql

Und this

hoffe, es wird