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が起動しているなら再起動する。
なお、RubyAPIの仕様上

$ /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を使ってみたい気もする


おしまい