coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

ruby mod_rubyとeruby

2007-01-10 22:44:34 | コンピュータ言語
ruby もインストールできましたので、Webで使いやすいように mod_ruby (http://www.modruby.net/ja/)関連もインストールします。
mod_ruby-1.2.6.tar.gz
eruby-1.0.5.tar.gz

をダウンロードします。展開してインストールを試みましょう。
$ tar xvzf mod_ruby-1.2.6.tar.gz
$ cd mod_ruby-1.2.6
$ ./configure.rb --with-apxs=/usr/local/httpd/bin/apxs
................
$ make
................
$

# make install
................
#
# cp examples/httpd.conf /usr/local/httpd/conf/extra/httpd-ruby.conf
#

続いて、eruby です。
$ tar xvzf eruby-1.0.5.tar.gz
$ cd eruby-1.0.5
$ ./configure --with-charset=utf-8
................
$ make
................
# make install
................
#

設定してみます。先ほどインストールした、httpd-ruby.conf を修正します。
# vi /usr/local/httpd/conf/extra/httpd-ruby.conf
(次の行を修正します。)

LoadModule ruby_module /usr/local/httpd/modules/mod_ruby.so
<IfModule mod_ruby.c>
  RubyRequire apache/ruby-run
  <Location /ruby>
    SetHandler ruby-object
    RubyHandler Apache::RubyRun.instance
    Options +ExecCGI
  </Location>
  <Files *.rbx>
    SetHandler ruby-object
    RubyHandler Apache::RubyRun.instance
  </Files>
  RubyRequire apache/eruby-run
  <Location /eruby>
    SetHandler ruby-object
    RubyHandler Apache::ERubyRun.instance
  </Location>
  <Files *.rhtml>
    SetHandler ruby-object
    RubyHandler Apache::ERubyRun.instance
  </Files>
  RubyRequire apache/erb-run
  <Location /erb>
    SetHandler ruby-object
    RubyHandler Apache::ERbRun.instance
  </Location>
</IfModule>

# vi /usr/local/httpd/conf/httpd.conf
(次の行を追加します。)

Include conf/extra/httpd-ruby.conf

#

こういうとき、extra ディレクトリ下に設定ファイルが分散できるようになったのは便利ですね。
httpd を再起動してテストします。
# /etc/rc.d/init.d/httpd restart
.............
#

example/test.rhtml を DocumentRoot の下において、ブラウザで見ると、正しく実行されました。eruby は OK です。
次に、次のような ruby プログラムを
print("Hello, World. \n" );

hello.rbx ファイルにして、ブラウザで見ると、hello.rbx は、Forbidden になります。
/usr/local/httpd/logs/error_log に
[error] access to /home/data/www/espiya/ruby/hello.rbx failed 
        for (null), reason: Options ExecCGI is off in this directory

と記録されているように、ExecCGI が禁止されているからです。ScriptAlias で指定されている /home/data/cgi-bin に ExecCGI が指定されていることを確認して、そこに移動してみます。
 
# mv hello.rbx /home/data/cgi-bin
#

として、参照すると、
[error] access to /home/data/cgi-bin/hello.rbx failed for (null), 
        reason: file permissions deny server execution

このようなエラーがでます。実行可能にしておく必要があります。
# chmod +x /home/data/cgi-bin/hello.rbx
# cd /home/data/cgi-bin/
# ./hello.rbx 
./hello.rbx: line 1: syntax error near unexpected token `"Hello, World.\n"'
./hello.rbx: line 1: `print("Hello, World.\n");'
# ruby hello.rbx
Hello, World.
#

このように、そのファイルは実行できないが、ruby に渡せば実行できる状態でも、.rbx をつけておけばブラウザで参照すると、mod_ruby によって、ruby に渡されて実行できるようになるわけです。これでブラウザから参照すると以下のようになります。
$ lynx -dump http://www.example.co.jp/cgi-bin/hello.rbx
Hello, World.

$

うまく動いています。次回は、mod_ruby テストで分かった、httpd のことについて述べたいと思います。


最新の画像もっと見る

コメントを投稿