トップ «前の日記(2000-12-18 (Mon)) 最新 次の日記(2000-12-20 (Wed))» 編集   RSS 1.0 FEED  

Journal InTime


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って&<>はエスケープしてくれるけど"はエスケープして くれないみたい。 これっていいのかな。