前回の続き。
Circus+WEBrick+Rackを動かしてみる - 偏った言語信者の垂れ流し
Rackアプリケーションが動くんならSinatraでも動かしてみようってことで試してみた。
hello_sinatra.rb
サーバー部分は前回と同じ。
Sinatra::Application.newでRackアプリケーションを生成して使う。
require 'socket' require 'webrick' require 'webrick/utils' require 'rubygems' require 'rack' require 'sinatra' # WEBrickのサーバーをファイルディスクリプタからのSocketに対応させたもの class FDHTTPServer < WEBrick::HTTPServer def initialize(config={}) config[:DoNotListen] = true super(config) listen(config[:FD]) end def listen(fd) sock = TCPServer.for_fd(fd) WEBrick::Utils::set_close_on_exec(sock) @listeners += [sock] end end # Sinatraアプリケーション get '/' do "Hello Sinatra!\n" end server = FDHTTPServer.new({ :FD => ARGV[0].to_i }) server.mount "/", Rack::Handler::WEBrick, Sinatra::Application.new ['INT', 'TERM'].each {|signal| Signal.trap(signal){ server.shutdown } } server.start
hello_sinatra.ini
Circusの設定ファイル。前回と特に変わらず。
[circus] check_delay = 5 endpoint = tcp://127.0.0.1:5555 [watcher:hello] cmd = ruby hello_sinatra.rb $(circus.sockets.web) use_sockets = True numprocesses = 5 [socket:web] host = 0.0.0.0 port = 8000
実行
$ circusd hello_sinatra.ini 2012-07-20 07:04:35 [13345] [INFO] Starting master on pid 13345 2012-07-20 07:04:35 [13345] [INFO] sockets started 2012-07-20 07:04:36 [13345] [INFO] hello started 2012-07-20 07:04:36 [13345] [INFO] Arbiter now waiting for commands
curlで動作を確認。
$ curl http://127.0.0.1:8000/ Hello Sinatra!
WEBrick以外のサーバーも試せたら良いのだけど、大変そうだったのであきらめた。