为什么mod_wsgi无法写入数据? IOError:无法写入数据

时间:2010-12-29 21:15:22

标签: django mod-wsgi ioerror

可能导致此错误:

$ 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  

这是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()

为什么Django无法写入数据?

我正在运行Django 1.2.4

4 个答案:

答案 0 :(得分:28)

该错误,没有任何类型的Python回溯,可能是以下问题的变体:

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

即,在Web服务器可以写回完整响应之前,HTTP客户端连接丢失时发生。它可以在Apache错误日志中显示为“客户端关闭连接”,“无法写入数据”或“无法刷新数据”IOError。也就是说,WSGI应用程序没有看到,因为在WSGI应用程序返回后发生了数据写入,因此无法将异常返回给应用程序以执行任何操作。

问题是,如果您配置要在电子邮件中发送给您的错误,是否从Django收到错误消息。如果你这样做,那么就是在Django中发生的事情。

答案 1 :(得分:6)

我在使用大量AJAX调用的应用程序中遇到同样的问题(mod_wsgi 3.3)。有没有任何已知的解决方案?我想只是忽略了异常,但这通常不是一个好主意。

<强>更新

实际上,这可能是由于某些原因造成的,但最可能的原因是您使用write回调而不是yield输出。

我相信这会有所帮助:

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

答案 2 :(得分:0)

我在Digital Ocean中发现了与我的python web应用程序相同的问题,并且在仔细检查了日志文件之后我发现这是我的数据库mysql的一个问题! 问题是由于我的存储空间不足(RAM) 所以检查这些问题并解决问题!

`For Mysql

this

希望它会有所帮助

答案 3 :(得分:-4)

我在下注这是一个权限问题。真正使目标目录/文件普遍可写。然后使您的www-data组拥有该文件(或您的apache用户所拥有的文件),使其成为可写组,并确保该文件夹中的任何内容都不敏感,因为这可能是一个安全问题。