読者です 読者をやめる 読者になる 読者になる

ctrl+cでrackサーバーをシャットダウンする

Rack.version == 1.1で、

require 'rack'
Rack::Handler::WEBrick.run HelloRack.new, :Port => 9292

とするとctrl+cでサーバーがシャットダウンできないので、次のように書き換えてシャットダウンできるようにしています。

rackアプリは設定ファイル(hello.ru)のなかで指定しています。設定ファイルには"run HelloRack.new"が書かれていますが、このrunはRack::Builderのメソッドです。
Rack::Server#startを見るとServer#appを呼ばれていて、その中でRack::Builder::parse_fileが呼ばれています。ここで、指定した設定ファイルをinstance_evalしているようです。結局rackアプリがServer#appから得られます。appはRack::Handler(webrick的にはServlet)に渡されて...あとの処理はwebrick(標準ライブラリ)を見ると分かります。


ところでRails::Server(書いたときの最新のコード)のstartメソッドはrackが自力でshutdownできるのにtrap {exit}を書いていて無駄かなと思います。