RackでEbbを動かしてみる。

RackEbb、やってみたくなった。
以下のサイトを参考にして、Hello, Worldを出してみようとする。
満足せる豚。眠たげなポチ。:CGI から Mongrel まで、Rack で Web アプリを Web サーバから抽象化する

%rackup -s ebb -p 10080 tiny_caller.ru
/opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/bin/rackup:123:in `const_get': 
uninitialized constant Rack::Handler::Ebb (NameError)
        from /opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/bin/rackup:123
        from /opt/local/bin/rackup:19:in `load'
        from /opt/local/bin/rackup:19

動かん。Ebb用のハンドラは無いのだ。
と思ったら、Ebbにあった、ので、無理矢理ロードさせちゃう。

%cd /opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/lib
%diff -u rack.rb rack.rb.new
--- rack.rb     2008-05-13 04:21:44.000000000 +0900
+++ rack.rb.new 2008-05-13 03:39:33.000000000 +0900
@@ -87,6 +87,7 @@
     autoload :WEBrick, "rack/handler/webrick"
     autoload :LSWS, "rack/handler/lsws"
     autoload :SCGI, "rack/handler/scgi"
+    autoload :Ebb, "/opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib/ebb"
   end
 end

…無理矢理すぎる。スマートにはどうしたらいいんだろう。
まあ、再度Ebbの起動に挑戦。

%rackup -s ebb -p 10000 tiny_caller.ru 
Ebb is listening at http://0.0.0.0:4001/
Ebb PID 927

うおー、起動!
あれ?でも-pオプション効いて無いじゃん。
気にせずブラウザでアクセスすると

Rack::Lint::LintError: env missing required key QUERY_STRING
        /opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/lib/rack/lint.rb:16:in `assert'
        /opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/lib/rack/lint.rb:124:in `check_env'
        /opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/lib/rack/lint.rb:120:in `each'
        /opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/lib/rack/lint.rb:120:in `check_env'
        /opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/lib/rack/lint.rb:35:in `call'
        /opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/lib/rack/reloader.rb:25:in `call'
        /opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/lib/rack/showexceptions.rb:23:in `call'
        /opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/lib/rack/commonlogger.rb:20:in `_call'
        /opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/lib/rack/commonlogger.rb:13:in `call'
        /opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib/ebb.rb:53:in `process'
        /opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib/ebb.rb:36:in `start_server'
        /opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib/ebb.rb:36:in `initialize'
        /opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib/ebb.rb:36:in `new'
        /opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib/ebb.rb:36:in `start_server'
        /opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib/ebb.rb:235:in `run'
        /opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/bin/rackup:154
        /opt/local/bin/rackup:19:in `load'
        /opt/local/bin/rackup:19
Ebb Error! NoMethodError  undefined method `empty?' for nil:NilClass
/opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/lib/rack/commonlogger.rb:48:in `each'
/opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib/ebb.rb:83:in `process'
/opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib/ebb.rb:36:in `start_server'
/opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib/ebb.rb:36:in `initialize'
/opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib/ebb.rb:36:in `new'
/opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib/ebb.rb:36:in `start_server'
/opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib/ebb.rb:235:in `run'
/opt/local/lib/ruby/gems/1.8/gems/rack-0.3.0/bin/rackup:154
/opt/local/bin/rackup:19:in `load'
/opt/local/bin/rackup:19

どうもRackが最低限必要とする環境変数が無いらしい。他のを参考にして追加。

%cd /opt/local/lib/ruby/gems/1.8/gems/ebb-0.2.0/ruby_lib
%diff -u ebb.rb ebb.rb.new 
--- ebb.rb      2008-05-13 04:20:51.000000000 +0900
+++ ebb.rb.new  2008-05-13 04:11:10.000000000 +0900
@@ -109,7 +109,9 @@
       'rack.errors' => STDERR,
       'rack.url_scheme' => 'http',
       'rack.multiprocess' => false,
-      'rack.run_once' => false
+      'rack.run_once' => false,
+      'rack.multithread' => true,
+      'QUERY_STRING' => ''
     }
     
     def env

Hello, Worldデター!