apache の設定

まずは mod_python を入れたよって設定。/etc/apache2/httpd.conf に以下の行を加える。

LoadModule python_module libexec/apache2/mod_python.so

設定を読み込ませるためにはリスタート。

Macintosh:mod_python-3.3.1 paraches$ sudo apachectl restart

これで apache そのもの?の設定は終わり。泣いたのは各ディレクトリの設定。

mod_python で .py なファイルを動かすのに、そのディレクトリに設定をする。で、その書き方はこんな感じ。(これは hello ってディレクトリに .htaccess で設定した場合)

AddHandler mod_python .py
PythonHandler hello
PythonDebug On

これは何?ってのはココで説明されてる。何回か読み返したけど、最後の「"http://myserver/mywebdir/myscript.py" も "http://myserver/mywebdir/montypython.py" も同じ結果になるのです。」が今ひとつわからない。ファイルが無くたって良いって…? 確かにやってみると「そんなファイル無い!」ってエラーにならないけど…。ディレクトリ名がクラス(オブジェクト?)になってその中の .py が定義ファイル…みたいな?

ま、それは置いておいて、後は apache なんかの設定。とにかく .htaccess の設定がちゃんと有効にならなくて泣いた。ずっと hello.py の中身が表示されるだけ…。AllowOverride に泣かされた〜。とりあえず今は /etc/apache2/users/ の中の自分の設定ファイルで

<Directory "/Users/paraches/Sites/">
	Options MultiViews
	AllowOverride All
	Order allow,deny
	Allow from all
</Directory>

こうして、/Users/paraches/Sites/hello で .htaccess

AddHandler mod_python .py
PythonHandler hello
PythonDebug On

こうしてる。
で、/Users/paraches/Sites/hello の中の hello.py は参考にしたサイトそのまんま

from mod_python import apache
def handler(req):
	req.content_type = "text/plain"
	req.send_http_header()
	req.write("Hello, World!!")
	return apache.OK

というわけで、なんとか mod_python で .py なスクリプトを動かす事はできた。まだ仕組みはしっかり理解できてないけど…。


あと、忘れちゃいけないのが、apachehttpd.conf に間違いがあると起動しない。最初、なんで Safari が「サーバにアクセスできません」って言ってくるのか全然わからなかった。/var/log/apache2/ にある error と access のログには「設定ファイルが間違っています!」なんてログ残ってないし。って、ここまで書いて気付いた!コンソール見たら出てたんじゃない?…って、あった〜! これに気付いてればもっとさっくり動いただろうに…

Invalid command 'LoasModule', perhaps misspelled or defined by a module not included in the server configuration  

ところで、今回は MacBook で試しての結果なのだけど、PowerMac G5 でも同じ事をしてみたらコンソールにこんなエラーが

httpd: Syntax error on line 116 of /private/etc/apache2/httpd.conf: Cannot load /usr/libexec/apache2/mod_python.so into server: dlopen(/usr/libexec/apache2/mod_python.so, 10): no suitable image found.  Did find:\n\t/usr/libexec/apache2/mod_python.so: mach-o, but wrong architecture

これは一体どういう意味だろう? mach-o だけど違うアーキテクチャ? PPC じゃなくて Intel のイメージだからダメ!って事? それとも 32bit と 64bit とか???