モジュールで動かすための設定

以前少しPHPの開発に関わったことがあって、サーバでのPHPの走り方に2通りあるって事は何となく知ってた。本番環境のサーバがリニューアルした時に、その辺が変更されたからだ。その時は

の違いだったけど、それぞれどういう意味なのか、どう違うのかよく分かってなかった。で、ググってたら「PHP における「モジュール版」と「CGI 版」の比較 + WordPress の適用例: 小粋空間」をみつけた。なるほどね。

Webサーバは xxx.php を実行ファイルと認識してプログラムを起動し、その実行結果を返却します。これを「CGI 版」と言うようです。

って書いてあるけど、拡張子に関しては、そういう風にApacheの設定ファイルに書いてるから、そういう風に動くんだろうね。その辺は最近はApache導入しみて、分からないなりに試行錯誤してたら何となく分かってきた。

で、分からないこと本題

例えばRubyでもモジュール版として動かす事はできるのかな?PHP以外の言語という意味なので特にRubyでなくてもPythonでも何でも良いんだけど。それとも上記のようなことってPHPに限ったことなのかな?
僕はそうじゃないと思ってて、mod_rubyがそのモジュール版ってやつのためにあるんじゃないかと思ってる。だって、PHPとかそのApacheモジュールであるphp5を入れた直後も特に何もしなくてもPHPスクリプトが動かせる状態になってたけど、CGIとして動かすための設定はどこにもなかったし(デフォルトではCGIの設定は /etc/apache2/mods-available/mime.conf でコメントアウトされているみたいだ)。ってことで、RubyPHPと同様に(/etc/apache2/mods-available/php5.conf を参考に ruby.conf でも作ってやって)設定してやると、動かせるようになるんじゃないかなーと踏んでるんだけど、どう設定してやれば良いかまだ分かってない。
mod_monoの時もそうだったんだけど、何も設定しないと、ブラウザがスクリプトのファイルをダウンロードしようとするんだよね。

  1. 拡張子rbはRubyスクリプトだよ
  2. Rubyスクリプトはダウンロードするんじゃなくて /usr/bin/ruby で動かすんだよ

みたいな設定をしてやらなくちゃいけないんだろうけど、そこらへんの設定がわからん。多分1番目は /etc/mime.types に書いてあって、それを /etc/apache2/mods-available/mime.conf から読み込んでる風だったので、ApacheはそれがRubyスクリプトだってことは分かってるんだと思う。問題は2番目なんだよなぁ。一応ググってそれらしいページ見つけて真似してやってみたけど、やっぱりダウンロードしようとするんだよな...。行き当たりばったりの知識ではなくて体系的に知識を身につけたいんだけど、どこを参照すればそういう勉強はできるのだろう。
mod_monoの場合は、/etc/apache2/mods-available/mod_mono.conf から読み込まれる /etc/mono-server2/mono-server2-hosts.conf で既に色々設定してあったけど、MonoDevelopで「Webに配置」して、AddMonoApplicationしてやらないと動かせなかった。逆に、それらをやるとなぜうまくいったのかは理解できてない。

なんかちょっと様子が変わった!

mod_rubyメモ | Netsphere Laboratories」の設定を真似して、スクリプトの拡張子をrbxにしてあげたら、Forbiddenになった。少し前身!Apacheの実行ユーザからスクリプトのファイルは見えるようにしてるけどなぁ...。今度は何が原因なのだろう><。
Apache難しいなぁ。

分からないことその2

Apacheの設定ファイルで、あるモジュールが読み込まれているかどうか判断する場合

<IfModule mod_mono.c>
  ほげほげ
</IfModule>

みたいに書くけど、なぜ元になったCのソースファイル名で指定するのか理解できない。実際にリンクされるmod_mono.soとかじゃないのかな?「http://t100.iza.ne.jp/blog/entry/173843/」をかなり期待して読んだけどなぁ...