さくらのレンタルサーバでErubisを動かしてみた

RubyCGIスクリプトを作る時に、HTML出力にRubyスクリプトでprint書きまくるのも嫌なので、やはりeRubyを使いたい。どうせなら高速なeRubyエンジンのErubisを使いたい。
というわけで、さくらのレンタルサーバでErubisを動かしてみました。自分のマシンなら、Erubisを使うにはRubygemsでインストールすれば良いのだけど、レンタルサーバだとそういうわけにもいかない。


そこで、CGIファイルを置くディレクトリにErubisのソース一式を手動で置く方法を使った。
Erubisのソース一式をlibディレクトリに置いて、CGIファイル(rubyスクリプト)の先頭に以下のように書けばErubisが使えるようになる。

#!/usr/local/bin/ruby -I./lib
require 'erubis'

1行目の"-I"の後に空白があると"./lib"が読み込まれないので、"-I./lib"と空白なしで書く事に注意。
また -I オプションを使わずに、2行目に require 'lib/erubis' と書いても、多分行ける。
他にも、$LOAD_PATHをいじって、$LOAD_PATH.unshift("./lib") とか $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/lib") と書く方法もあります(コメント下さった方、ありがとうございます)。

以下、環境変数の一覧を表示するeRubyスクリプトを例に詳細説明。

CGIソース一式

ローカルで、環境変数の一覧を表示するためのCGIスクリプトとeRubyスクリプトを用意。

$ ls ~/Sites/cgi
printenv.cgi	printenv.rhtml

ちなみに上記の ~/Site/cgi ディレクトリは、ローカルの作業ディレクトリ。

printenv.cgiはこんな感じ。

#!/usr/local/bin/ruby -I./lib
require 'cgi'
require 'erubis'

cgi = CGI.new
cgi.out({'charset'=>'utf-8'}) do
  Erubis::EscapedEruby.load_file('printenv.rhtml').evaluate
end

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>

Erubisのソース一式

以下からErubisのソース一式をダウンロード。
http://rubyforge.org/frs/?group_id=1320&release_id=7090

Erubisが利用しているabstractライブラリのソース一式もダウンロード。
http://rubyforge.org/frs/?group_id=1444&release_id=4578

ダウンロードしたアーカイブを展開して、2つのアーカイブのlibディレクトリ以下の*.rbファイルをまとめたlibディレクトリを、cgiファイルを置くディレクトリ(ここでは ~/Sites/cgi )に作る。
libディレクトリのファイル一覧はこんな感じ。

$ ls -F ~/Sites/cgi/lib
ababstract.rb	erubis/		erubis.rb

さくらのサーバにアップロード

用意したファイル一式(ここでは ~/Sites/cgi 以下のファイル一式)をさくらのサーバにアップロードする。
なお、ファイルのアクセス権限を755にするのは、*.cgiのみで十分。残りのファイルは644で問題なし。
Erubisにキャッシュファイル*.cachを作らせる場合でも、特にディレクトリのアクセス権限の設定などは不要。さくらのWebサーバ(Apache)の場合、suExecを使って、CGIは所有者権限で動作するようなので*1、何も設定しなくてもキャッシュファイル作可能。

CGIファイルの実行

Webブラウザからprintenv.cgiのURL(例えば http://<ドメイン名>/cgi/printenv.cgi)を指定して開く。

他のライブラリでの応用

今回はErubisを動かしてみたけど、CGIファイルを置くディレクトリにライブラリのソース一式を置く方法は、さくらのサーバにインストールされていない他のライブラリを使うときにも、同じように適用できるはず。