WEBrick+Rack

WEBrickとRackのリクエスト処理周りを読んだ。

この様に、サーバーに依存するHandler部分
WEBrickならservice()、Mongrelならprocess())
を吸収し、ユーザーが定義したcall()を動作させる。

require "rubygems"
require "rack"

class Hello
  def call env
    Rack::Response.new.finish do |res|
      res.write "hello"
    end
  end
end

Rack::Handler::WEBrick.run Hello.new, :Port=>7000

.ruファイルを記述した場合は、Rack::BuilderがHandlerへ
渡すオブジェクトをパズルのように組み立てています。