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という文字列を見て、実行権限の問題に気づきました。
まったくアホですね。

問題の切り分けが下手だと徹夜するという教訓でした。

参考

Multiple Python Versions
Lack Of Python Shared Library