Hatena::ブログ(Diary)

NAT’s Programming Champloo このページをアンテナに追加 RSSフィード

2008-05-04

[][] さくらレンタルサーバで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のソース一式をダウンロード

RubyForge: Erubis: Project Filelist

Erubisが利用しているabstractライブラリのソース一式もダウンロード

RubyForge: abstract: Project Filelist

ダウンロードしたアーカイブを展開して、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.cgiURL(例えば http://<ドメイン名>/cgi/printenv.cgi)を指定して開く。

他のライブラリでの応用

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

*1:参考URL:no title

ななしさん080802ななしさん080802 2008/08/02 16:37 ちなみに、

#!/usr/local/bin/ruby
$LOAD_PATH.unshift(”./lib”)
または
$LOAD_PATH.unshift(”#{File.dirname(__FILE__)}/lib”)

という書き方でも可です。
rubyが/usr/local/binでも/usr/binでも
どちらにあっても使えるようにしたくて
#!/usr/bin/env ruby
などとしたい場合でも使える方法です。
(3つ目以降の引数は付けられない)

NATNAT 2008/08/02 22:25 コメントありがとうございます。
なるほど、$LOAD_PATHを変更するやり方もあるのですね。勉強になりました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証