fastcgi を使用して apache で実行されている django アプリがあります (Flup の WSGIServer を使用します)。
これは、dispatch.fcgi を介してセットアップされ、以下に連結されます。
#!/usr/bin/python
import sys, os
sys.path.insert(0, os.path.realpath('/usr/local/django_src/django'))
PROJECT_PATH=os.environ['PROJECT_PATH']
sys.path.insert(0, PROJECT_PATH)
os.chdir(PROJECT_PATH)
os.environ['DJANGO_SETTINGS_MODULE'] = "settings"
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded",daemonize='false',)
runfastcgi は作業を行うものであり、最終的に WSGIHandler で WSGIServer を実行します。
fastcgi をクラッシュさせる例外が発生することがあります。
編集: どのエラーが fastcgi をクラッシュさせるか、または fastcgi がクラッシュするかどうかはわかりません。Apacheを再起動するまで、サイトがダウンすることがあることを知っています-一貫してダウン--。error.log に表示される唯一のエラーは、以下に示す壊れたパイプと不完全なヘッダーのものです。
不完全なヘッダー:
注: 機密情報や雑然としたものは "..." に置き換えました
[Sat May 09 ...] [error] [client ...] (104)Connection reset by peer: FastCGI: comm with server ".../dispatch.fcgi" aborted: read failed
[Sat May 09 ...] [error] [client ...] FastCGI: incomplete headers (0 bytes) received from server ".../dispatch.fcgi"
[Sat May 09 ...] [error] [client ...] (32)Broken pipe: FastCGI: comm with server ".../dispatch.fcgi" aborted: write failed,
壊れたパイプ:
注: これはたまたま django アプリではなく trac サイト用ですが、見た目は同じです。
Unhandled exception in thread started by <bound method Connection.run of <trac.web._fcgi.Connection object at 0xb53d7c0c>>
Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/Trac-0.12dev_r7715-py2.4.egg/trac/web/_fcgi.py", line 654, in run
self.process_input()
File "/usr/lib/python2.4/site-packages/Trac-0.12dev_r7715-py2.4.egg/trac/web/_fcgi.py", line 690, in process_input
self._do_params(rec)
File "/usr/lib/python2.4/site-packages/Trac-0.12dev_r7715-py2.4.egg/trac/web/_fcgi.py", line 789, in _do_params
self._start_request(req)
File "/usr/lib/python2.4/site-packages/Trac-0.12dev_r7715-py2.4.egg/trac/web/_fcgi.py", line 773, in _start_request
req.run()
File "/usr/lib/python2.4/site-packages/Trac-0.12dev_r7715-py2.4.egg/trac/web/_fcgi.py", line 582, in run
self._flush()
File "/usr/lib/python2.4/site-packages/Trac-0.12dev_r7715-py2.4.egg/trac/web/_fcgi.py", line 589, in _flush
self.stdout.close()
File "/usr/lib/python2.4/site-packages/Trac-0.12dev_r7715-py2.4.egg/trac/web/_fcgi.py", line 348, in close
self._conn.writeRecord(rec)
File "/usr/lib/python2.4/site-packages/Trac-0.12dev_r7715-py2.4.egg/trac/web/_fcgi.py", line 705, in writeRecord
rec.write(self._sock)
File "/usr/lib/python2.4/site-packages/Trac-0.12dev_r7715-py2.4.egg/trac/web/_fcgi.py", line 542, in write
self._sendall(sock, header)
File "/usr/lib/python2.4/site-packages/Trac-0.12dev_r7715-py2.4.egg/trac/web/_fcgi.py", line 520, in _sendall
sent = sock.send(data)
socket.error: (32, 'Broken pipe')
/var/log/apache2/error.log を調べましたが、クラッシュの原因がわかりません。メモリのスワップの問題が時々発生しますが、これは違うと思います。(私の無知を許してください。私は、サーバー管理をより適切に実装およびデバッグする方法を学びたいと思っています。)
runfastcgi を try/except でラップしたいと思います。ランダムな例外を処理する最良の方法は何ですか (実際の原因を突き止めるまで)?
WSGIServer は多くのリクエストを処理すると思います。例外をキャッチした場合、無限ループを恐れずに runfastcgi を再呼び出しできますか? 問題のある例外呼び出し要求に対してエラー HttpRequest を返す必要がありますか? 私はそれを行う方法さえわかりません。
私はdjango/core/servers/fastcgi.pyとdjango/core/handlers/wsgi.pyとdjango/http/init.pyを見てきました
flup の側面について理解を深めることができませんでした。
学べそうなアイデアや経験はありますか?
ありがとう!