$Id: erbcgi.html,v 1.1 2000/04/24 15:18:08 mas Exp $

erb|cgi

‥作成中‥

最近になってようやっとeRubyなCGIを書くようになりました。 このページは erb-1.2 に同梱される erbcgi.rb を使って CGIを書いてみるメモです。 運が良ければ Web server を変更せずにeRubyなCGIが試せます。


erbcgi.rb

eRubyスクリプトを実行するRubyスクリプトですが、次の特徴があります。


とりあえず使う

コマンドラインでとりあえず使うには、 ruby erbcgi.rbに続けて eRuby スクリプトのファイルを渡します。

% ruby erbcgi.rb yourscript.rhtml

このままでは、従来のerb.rb/erbl.rbとほとんど変わりませんね。
erbcgi.rbでは、 eRubyスクリプトのファイルの最初の行に以下のように ruby インタプリタ、erbcgi.rb を書いて、 chmod +x すると、./yourscript.rhtml で実行できます。

#!/usr/local/bin/ruby /usr/local/lib/ruby/site_ruby/1.4/erb/erbcgi.rb

あとはいつものeRubyスクリプトと同様に書けます。


定義済みの変数

$:

環境変数 SCRIPT_FILENAMEがセットされていると、 そのディレクトリを $: に追加します。 ライブラリなどを require するときにちょっと便利。

_erb

erbcgi.rb から起動される eRuby スクリプトには _erbという特別な変数が定義されています。 これは ERbCGI クラスのオブジェクトです。 _erb.body_erb.headの二つの属性を 変更することでボディやヘッダの内容を制御することができます。

_erb.body
ボディの内容を保持する文字列。''を代入して初期化したり、 concat して文字を追加したりできます。
_erb.head
ヘッダの属性を持つハッシュ。 ヘッダに属性を追加したい時は、属性名をキーに文字列を代入して下さい。 _erb.head['Content-Type']="text/html"が デフォルトですが、上書きできます。
#この辺の仕様は標準の cgi.rb に準拠するべきか!?

次のサンプルコードはbodyを初期化する例です。

<% begin %> 
なにか
<% rescue %> 
エラーが起きた! ボディを初期化したいぞ。
<% _erb.body = '' %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML><TITLE>エラー</TITLE></HTML>
などなど
<% end %> 

download


m_seki@mva.biglobe.ne.jp