Sinatraを0.9.2にupdateするとWEBrickで動作しなくなった
Sinatraを0.9.2にupdateすると、以下のエラーになって組み込みのWEBrickで動かなくなってしまった。
/usr/lib/ruby/gems/1.8/gems/sinatra-0.9.2/lib/sinatra/base.rb:930:in `detect_rack_handler': Server handler (thin,mongrel,webrick) not found. (RuntimeError) from /usr/lib/ruby/gems/1.8/gems/sinatra-0.9.2/lib/sinatra/base.rb:862:in `run!' from /usr/lib/ruby/gems/1.8/gems/sinatra-0.9.2/lib/sinatra/main.rb:34 ...
sinatra/base.rbの921行目「detect_rack_handler」で「対応するサーバーがRack::Handlerに登録されていない」エラーになっている。
原因
Rack::Handlerには、利用可能なサーバーとして"mongrel"や"webrick"が登録されている。sinatraはサーバーとして「thin,mongrel,webrick」を探しにいくが、途中(sinatra/base.rbの925行目)でなぜか「capitalize」して探索している。このため、対応するサーバーがヒットせず、エラーになってしまっている。んー。普通にバグっぽいなー。
対策
以下のおまじないを最初の方に書いておけば、問題をとりあえず回避できます。
Rack::Handler.register 'Webrick', 'Rack::Handler::WEBrick'
Rack::Handlerに「capitalize」後のサーバー名でも登録しておくという仕組み。全体は↓のような感じになります。
require 'rubygems' require 'sinatra' Rack::Handler.register 'Webrick', 'Rack::Handler::WEBrick' get( "/" ) { 'Hello world!' }