mod_wsgi 周りでハマって徹夜した件
mod_wsgi を入れようとしたら、糞ハマったのでメモり。
環境:
CentOS5
httpd-2.2.17
mod_wsgi-3.3
Python-2.7.1
/home/user 以下にインストール
httpd, mod_wsgi, python は、ソースからコンパイルしたものを使いました。
とりあえず、/home/user ディレクトリに実行権限を付け忘れていたことが原因。
すごくざんねんです。
子プロセスが起動しない
具体的なエラーは下記の通り。
$ ps aux | grep httpd root 27203 0.0 0.1 5816 3252 ? SNs 12:46 0:00 /path/to/httpd-2.2.17/bin/httpd -k start daemon 27210 0.0 0.0 0 0 ? ZN 12:46 0:00 [httpd] <defunct> daemon 27211 0.0 0.0 0 0 ? ZN 12:46 0:00 [httpd] <defunct>
なぜか子プロセスがゾンビ化。
Apache のログを見ると、mod_wsgi の初期化部分でコケてた。
[Sun Jan 16 12:45:10 2011] [info] mod_wsgi (pid=27185): Python home /path/to/Python-2.7.1. [Sun Jan 16 12:45:10 2011] [info] mod_wsgi (pid=27185): Initializing Python. ImportError: No module named site
ちなみに Apache のログレベルはinfo。
mod_wsgiのソースを眺めたところ、mod_wsgi.cで呼び出されているPy_Initialize()内でコケてた。
解決策
/home/userディレクトリに実行権限をつけたった。
たぶんpythonを/home/user下にインストールしてたため、daemonユーザだとリード権限がなくて、siteというモジュールを読みにいけなかったのだろうと推測。
最終的にPython-2.6.6をenable-sharedつきでコンパイルしたものを使い、httpdの立ち上げに成功。。。
そして、ウェブページにアクセスしForbiddenという文字列を見て、実行権限の問題に気づきました。
まったくアホですね。
問題の切り分けが下手だと徹夜するという教訓でした。