OS XのWeb共有でErubis(eRuby)を動かしてみた
OS XのWeb共有でeRubyを動かせるようにしてみた - NAT’s Programming Champloo
これの続きです。このときは、eRubyのC実装のerubyを入れて動かしたのですが、今回はerubyより10%速いというErubisを使ってみました。
インストールはRubyGemsで。
$ sudo gem install --remote erubis
Erubisには、eRubyスクリプトをrubyスクリプトに変換したキャッシュファイルを生成する機能(File Caching)があるので、これを使うなら、ディレクトリのアクセス権限を適切に指定する必要がある。
Unixでのセキュリティ設定はあまり詳しくないので、どう設定するのが適切なのかよく分からないのだけど、以下を参考に指定。
Erubis Users' Guide - kuwata-lab.com
OS Xが組み込みで持っているApacheの場合、Apacheプロセスはユーザー"_www"で起動しているようなので、ユーザー"_www"が所属するグループがファイル作成できるように、ディレクトリにアクセス権限を指定。
$ cd ~/Sites/cgi #eRubyスクリプトを置くディレクトリへ移動 $ sudo chgrp _www . $ sudo chmod 775 .
eRubyスクリプトの実行の方は、Apacheから直接erubisコマンドを起動するのではなく、CGIで起動したrubyスクリプト経由で呼び出すことにした。この方が、eRuby呼ぶ前に色々前処理できそうなのと*1、設定ファイルを変更しなくて済む。
OS XのWeb共有でCGIを動かせるようにしてみた - NAT’s Programming Champloo
上記で示した設定をして、cgiスクリプトは起動できる状態になっているとして、例えば、環境変数を一覧表示するeRubyスクリプトを起動するrubyスクリプトは下記の通り。
#!/usr/bin/ruby -rubygems require 'cgi' require 'erubis' cgi = CGI.new cgi.out({'charset'=>'utf-8'}) do Erubis::EscapedEruby.load_file('printenv.rhtml').evaluate end
起動されるeRubyスクリプトprintenv.rhtmlは、こんな感じ。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>環境変数一覧</title></head> <body> <h1>環境変数一覧</h1> <table border> <tr><th>名前</th><th>値</th> <% ENV.each do |key,value| %> <tr><td><%=key%></td><td><%=value%></td></tr> <% end %> </table> </body> </html>
ちなみに、WebブラウザからCGIにアクセスしてInternal Server Errorが出ているときは、/var/log/apache2/error_log を見れば、エラー出力が確認できる。eRubyスクリプトが動くまで、何度このファイルを見たことか・・・。