Thinサーバーをまた使ってみる

Tsukasa OISHI

 Rubyで書かれたwebサーバ Thinも、いつの間にかバージョン0.5.4になっていたので、また試してみることにします。以前、試してみたとき( webサーバ Thin を使ってみる)は、HTTPヘッダがおかしなことになって、cookieがうまく働かなかったりしましたが、今回は修正されているみたい。また試してみることにします。
 関係ないけど、Thinのコードネームはおもしろいね。今回はFlying Mustardだそうです。

  spider-manさんがすでに試されていますが、Thinにクラスタ機能が実装されました。が、まだちょっと使いにくそう。なので、以前作ったthin_clusterを改良してみました。

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

CONFIG_FILE = "config/thin_cluster.yml"
KEY = {"e" => :env, "p" => :port, "s" => :servers}

def error
  puts "thin_cluster config|start|stop [options]"
  exit
end

error if ARGV.size < 1
case ARGV.shift
when "config"
  config = {:env => "development", :port => 3000, :servers => 1}

  work = nil
  ARGV.each do |argv|
    if argv =~ /^\-([eps])(.*)$/
      work = nil
      if $2 && !$2.empty?
        config[KEY[$1]] = $2
      else
        work = $1
      end
    elsif work
      config[KEY[work]] = argv
      work = nil
    end
  end
  YAML.dump(config, File.open(CONFIG_FILE, "w"))
when "start"
  config = YAML.load_file(CONFIG_FILE)
  `thin -e #{config[:env]} -p #{config[:port]} -s #{config[:servers]} -d start`
when "stop"
  config = YAML.load_file(CONFIG_FILE)
  `thin -p #{config[:port]} -s #{config[:servers]} stop`
else
  error
end

 ソースを見れば一目瞭然だろうけど念のため使い方。すべてRAILS_ROOTで実行します。
 まずは設定。

  thin_cluster config -p3000 -e production -s 2

一度設定しておけば、起動するときは

  thin_cluster start

停止するときは

  thin_cluster stop

でOKです。