webサーバ Thin を使ってみる

Tsukasa OISHI

 Mongrelより速いというウワサの Thinというwebサーバを会社の同僚の方に教えてもらいました。実際に計測してみるとmongrelより速いそうです。mongrelの開発者がグレてしまったので、Thinを使ってみるのもいいかもしれません。ちょっと試してみました。

 まずはインストール。

sudo gem install thin

 あとはRAILS_ROOTに移動して、

thin start

でOKです。超簡単(デフォルトのポート番号は3000です)。もちろん、RAILS_ENVやポート番号も指定できるしデーモンとして起動することもできます。

thin -p4000 -e production -d

みたいな感じ。デーモンとして起動したときは

thin stop

で停止できます。

いちいち手で入力するのが面倒なので、複数プロセスで起動するthin_clusterを作ってみました。

#!/usr/bin/ruby
require 'yaml'

CONFIG_FILE = "config/thin_cluster.yml"
def error
  puts "thin_cluster config|start|stop [options]"
  exit
end

error if ARGV.size < 1

mode = ARGV.shift
case mode
when "config"
  config = {:env => "development", :port => 3000, :servers => 1}

  if i = ARGV.index("-e")
    config[:env] = ARGV[i + 1]
  end
  if i = ARGV.index("-p")
    config[:port] = ARGV[i + 1].to_i
  end
  if i = ARGV.index("-N")
    config[:servers] = ARGV[i + 1].to_i
  end
  YAML.dump(config, File.open(CONFIG_FILE, "w"))
when "start"
  config = YAML.load_file(CONFIG_FILE)
  config[:servers].times do |i|
    `thin -e #{config[:env]} -p #{config[:port] + i} -P "tmp/pids/thin.#{config[:port] + i}.pid" -d start`
  end
when "stop"
  config = YAML.load_file(CONFIG_FILE)
  config[:servers].times do |i|
    `thin -P "tmp/pids/thin.#{config[:port] + i}.pid" stop`
  end
else
  error
end

thinコマンドをそのまま呼んでるだけの超手抜きですが、まあ自分が使うだけだしこれでいいや。さっそく、kaeruspoonとmilookとかえるイメージをthin_clusterで動かしてみます。しばらく様子を見よう。

追記
続きが Thinサーバーをまた使ってみるにあります。