2010-12-29 12 views
38

Che cosa potrebbe causare questo errore:Perché mod_wsgi non è in grado di scrivere dati? IOError: non è riuscito a scrivere i dati

$ 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 

Ecco lo script WSGI:

$ 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() 

Perché Django non è in grado di scrivere dati?

Io corro Django 1.2.4

+0

correlati: http: //stackoverflow.com/a/7089413/633961 – guettli

risposta

-4

sto scommesse si tratta di un problema di autorizzazioni. Vero che la directory/il file di destinazione è universalmente scrivibile. Quindi rendi il file di proprietà del tuo gruppo www-data (o qualunque sia l'utente apache), rendilo gruppo scrivibile e assicurati che nulla in quella cartella sia sensibile perché questo potrebbe essere un problema di sicurezza.

26

Tale errore, senza alcun tipo di Python traceback, può essere una variazione sul problema descritto in:

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

Cioè, si verifica quando HTTP connessione client si perde prima che la risposta completa potrebbe essere scritto indietro dal server web. Può manifestarsi come IOError "client closed connection", "failed write write" o "failed to write data" nel log degli errori di Apache. Cioè, non visto dall'application WSGI perché la scrittura dei dati avviene dopo che l'applicazione WSGI è tornata e quindi non può restituire all'applicazione l'eccezione per fare qualcosa.

La domanda è se si riceve un messaggio di errore da Django se si configurano errori da inviare all'utente tramite posta elettronica. Se lo fai, allora sta succedendo qualcosa in Django.

+0

Ma come risolverlo? Nella mia applicazione sembra essere correlato a send_mail (che richiede molto tempo) ... – gabn88

+1

Non ha senso aggiungere una domanda vaga senza informazioni specifiche sul tuo caso a un followup esistente per la domanda di qualcun altro. La tua situazione potrebbe essere completamente diversa. Crea una nuova domanda spiegando in dettaglio il tuo problema. –

+0

Mi dispiace, ma ho ricevuto lo stesso errore e ho configurato Django per l'invio di e-mail, ma non ho ricevuto alcuna posta. Nel mio caso il problema era che ho cambiato la mia password della cassetta postale smtp senza cambiarla in Django. Potrebbe aiutare qualcuno in futuro a cercare lo stesso problema come ho fatto io ... Nessun mezzo per far male a nessuno! – gabn88

5

Ho lo stesso problema in un'applicazione che utilizza molte chiamate AJAX (mod_wsgi 3.3). C'è qualche soluzione nota per questo? Ho pensato di ignorare l'eccezione, ma di solito non è una buona idea.

UPDATE

In realtà, questo può essere dovuto a diverse cose, ma la causa più probabile è che si sta utilizzando il write callback anziché yield ing vostra uscita.

Credo che questo vi aiuterà:

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

+1

Accadrà con scrittura o rendimento, non fa differenza. Django non usa la resa di sola scrittura. Se si stava utilizzando la scrittura, l'errore si sarebbe propagato nuovamente all'applicazione WSGI e l'applicazione probabilmente lo avrebbe catturato e convertito in una 500 senza che venisse registrato. Per il rendimento, mod_wsgi sta scrivendo i dati e non c'è modo di propagare l'errore all'applicazione, quindi mod_wsgi registra l'errore senza traceback come non nel contesto dell'applicazione. –

0

ho trovato lo stesso problema con il mio pitone web app in oceano digitale e dopo aver controllato il file di log sul serio ho scoperto che era un problema con il mio database mysql! Il problema era dovuto al fatto che stavo esaurendo la memoria (RAM) Quindi controlla quelle domande e risolvi il problema!

`For Mysql

E this

auguriamo che contribuiscano

Problemi correlati