2000-12-19 (Tue) [長年日記]
_ RubyHandler
mod_rubyのRubyHandlerの仕様を決めた。
たとえば、次のようなコードでハンドラオブジェクトを生成したとする。
class MyHandler def hanlder(r) ... end def translate_handler(r) ... end end MY_HANDLER = MyHandler.new
このハンドラオブジェクトを次のようなディレクティブによって ハンドラとして登録する。
RubyHandler MY_HANDLER RubyTranslateHandler MY_HANDLER
つまり、ハンドラによって呼び出すメソッドが違う(RubyHandlerはhandler、 RubyTranslateHandlerはtranslate_handlerなど)ため、一つのオブジェクトを 複数のハンドラに登録できるわけ。 これで複数のハンドラ間でデータ共有ができるはず。
後は実装するだけなんだけど、たいてい実装してみると何か問題があるんだよね。
_ HTTPステータスライン
comp.lang.rubyで、mod_rubyで以下のようなコード(ちょっと変更してある)が 期待通り動作しない、という質問があった。
print "Content-Type: text/plain\r\n\r\n" print "hello world"
mod_rubyはNPH-CGI互換なので、HTTPステータスライン("HTTP/1.1 200 OK" とか"HTTP/1.1 404 Not Found"とかいうやつですね)を出力してくれない。 したがって、以下のように自分で出力する必要がある。
print "HTTP/1.1 200 OK\r\n" print "Content-Type: text/plain\r\n\r\n" print "hello world"
でもこんなの面倒だし、他にも出力するべきへッダがあるので、普通はcgi.rbを使う。
require "cgi" cgi = CGI.new print cgi.header("type"=>"text/plain") print "hello world"
これもFAQに追加しなくちゃ。
_ RD::RD2HTMLVisitor
RD::RD2HTMLVisitorって&<>はエスケープしてくれるけど"はエスケープして くれないみたい。 これっていいのかな。