読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

Sinatraを0.9.2にupdateするとWEBrickで動作しなくなった

Ruby Sinatra

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!'
}