42

このエラーの原因:

$ sudo テール -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

4 に答える 4

31

このエラーは、Python トレースバックの類がないため、以下で説明されている問題のバリエーションである可能性があります。

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

つまり、Web サーバーによって完全な応答が書き戻される前に、HTTP クライアント接続が失われた場合に発生します。これは、「クライアントが接続を閉じました」、「データの書き込みに失敗しました」、または「データのフラッシュに失敗しました」IOError として Apache エラー ログにのみ現れます。つまり、データの書き込みは WSGI アプリケーションが戻った後に発生しているため、WSGI アプリケーションでは認識されず、アプリケーションに例外をスローして何かを行うことはできません。

問題は、エラーを電子メールで送信するように設定した場合に、Django からエラー メッセージを受け取るかどうかです。もしそうなら、代わりにDjangoで何かが起こっています。

于 2010-12-30T07:55:03.540 に答える
6

多くの AJAX 呼び出し (mod_wsgi 3.3) を使用するアプリケーションでも同じ問題が発生します。これに対する既知の解決策はありますか?例外を無視することも考えましたが、それは通常あまり良い考えではありません。

アップデート

実際には、これにはいくつかの原因が考えられますが、最も可能性の高い原因は、出力writeの代わりにコールバックを使用していることです。yield

これが役立つと思います:

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

于 2011-03-29T13:15:52.160 に答える
-5

私はそれが許可の問題であると賭けています。True を指定すると、ターゲットのディレクトリ/ファイルを一般的に書き込み可能にします。次に、www-data グループ (または apache ユーザーが何であれ) が所有するファイルを作成し、グループで書き込み可能にし、セキュリティ上の問題になる可能性があるため、そのフォルダー内に機密性の高いものがないことを確認します。

于 2010-12-29T23:26:50.867 に答える