39 votes

Pourquoi mod_wsgi n'est-il pas capable d'écrire des données? IOError: échec de l'écriture des données

Quelle pourrait être la cause de cette erreur:

$ 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  
 

Voici le 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()
 

Pourquoi Django ne pourrait-il pas écrire des données?

J'utilise Django 1.2.4

29voto

Graham Dumpleton Points 23711

Cette erreur, sans aucune sorte de Python traceback, peut-être une variation sur le problème décrit dans:

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

Qui est, se produit lorsque HTTP client, la connexion est perdu avant d'avoir la réponse complète pourrait être écrit par le serveur web. Elle peut se manifester en tant que client de connexion fermée', 'n'a pas d'écrire des données" ou "n'a pas pu vider les données" IOError dans le journal des erreurs d'Apache uniquement. C'est à dire., pas vu par application WSGI, car l'écriture des données se produit après application WSGI est de retour et ne peut donc pas jeter l'exception à l'application de faire quelque chose avec.

La question est de savoir si vous obtenez un message d'erreur de Django si vous configurez les erreurs à être envoyé dans l'email. Si vous le faites, alors, au contraire, est quelque chose qui se passe dans Django.

6voto

ubik Points 2361

J'ai le même problème dans une application qui utilise beaucoup d'appels AJAX (mod_wsgi 3.3). Est-il une solution pour cela? J'ai pensé à simplement ignorer l'exception, mais qui normalement n'est pas une très bonne idée.

Mise à JOUR

En fait, cela peut être dû à plusieurs choses, mais la cause la plus probable est que vous êtes à l'aide de l' write rappel au lieu de yielding de votre sortie.

Je crois que ça va aider:

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

-1voto

Afrowave Points 113

Comme dustynachos, je soupçonne des autorisations de fichiers. Allez dans le terminal, accédez aux dossiers et examinez les autorisations. Si, par hasard, vous vous êtes connecté en tant que root / sudo su et avez modifié / créé des dossiers, il s’agit presque toujours d’autorisations de fichier. Changez le propriétaire en "nom d'utilisateur" et le groupe en "www-data".

-4voto

dustynachos Points 1307

Je parie que c'est un problème d'autorisations. Vrai rendant le répertoire / fichier cible universellement accessible en écriture. Rendez ensuite le fichier appartenant à votre groupe www-data (ou quel que soit votre utilisateur apache), créez un groupe en écriture et assurez-vous qu'aucun élément de ce dossier n'est sensible, car cela pourrait être un problème de sécurité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X