mod_rubyインストール再挑戦
第十三回
さて、前回Apacheのapxsが無かったせいでインストールできなかったmod_rubyだったが、
Apache2.2.0をインストールした際DSOを有効にしたので再挑戦してみた。
まず、現在の状態をまとめてみよう。
- Windows XP上にVMWare Playerを使ってFedoraCore4環境を構築
- 最初から入っていたApacheは2.0.54(/usr/sbin/httpd)
- Apache2.2.0を追加インストール(/usr/local/apache2/bin/httpd)
この状態で、Apache2.2.0の方へmod_rubyをインストールする。
前回と同様に、ダウンロードしてきたソースからインストールする。
$ tar zxvf mod_ruby-1.2.5.tar.gz $ cd mod_ruby-1.2.5 $ ./configure.rb --with-apxs=/usr/local/apache2/bin/apxs $ make $ su % make install
前回と違う点は、Apacheのapxsを指定しているところだ。
今回はApacheが複数存在するので、どのapxsファイルを用いるかを指定しなければいけない。
また、単独のApacheを使っている環境でも、指定しておいた方がいいかも。
# ex. /usr/sbin/apxs
その後、共有ライブラリに利用するリンクを最新のものに更新するために、
/etc/ld.so.conf を適当なエディタで開き、以下を追加する。
/usr/local/lib /usr/local/apache2/lib
そして、以下を実行することでリンク情報を最新のものに更新する。
$ /sbin/ldconfig -v
次に、設定ファイルを書く。
今回ソースからインストールしたApache2.2.0でmod_rubyを利用するため、/usr/local/apache/conf/httpd.confを編集する。Apache2.2.0では、設定ファイルの見通しが非常に良くなっており、各種モジュールの設定は別の設定ファイルに書き、httpd.confではそれをIncludeするということをしている。そこで、mod_rubyのための設定ファイルを/usr/local/apache2/conf/conf.d/mod_ruby.confとして作成する。/usr/local/apache/conf/httpd.confを適当なエディタで開き、以下の一文を追加する。場所はディレクティブの中でなければどこでも良い。
Inculde conf/conf.d/mod_ruby.conf
次に、/usr/local/apache2/conf/conf.d/mod_ruby.confの内容は、例えば以下のようにする。
LoadModule ruby_module modules/mod_ruby.so <IfModule mod_ruby.c> # mod_ruby と eRuby を使うための記述 RubyRequire apache/ruby-run RubyRequire apache/eruby-run # .rbx の拡張子の付いたファイルをRubyスクリプトとして実行する <Files *.rbx> SetHandler ruby-pbject RubyRequire Apache::RubyRun.instance </Files> # .rhtml の拡張子の付いたファイルをeRubyファイルとして扱う <Files *.rhtml> SetHandler ruby-object RubyRequire Apache::ERubyRun.instance </Files> RubyRequire auto-reload </IfModule>
今回は、erubyもインストールしてみよう - のほほん徒然でインストールしたeRubyも使えるような設定にしてみた。
最後にApacheの設定ファイルが正しく書けているか
$ /usr/local/apache2/bin/httpd -t
とうってみて確認する。
Syntax OK
と出れば、OKである。あとは、Apacheが起動しているなら再起動する。
なお、RubyのAPIの仕様上
$ /usr/local/apache2/bin/apachectl restart
とすると、メモリが開放されずメモリリークが起こるらしい*1。そこで、当面の間
$ /usr/local/apache2/bin/apachectl stop $ /usr/local/apache2/bin/apachectl start
とした方が良いらしい。
# せっかくApache2.2.0なんだからapachectl graceful-stopを使ってみたい気もする
おしまい