script/server で起動する web サーバを選択するには

clayfish2007-05-19

気になったので調べてみたよログです.
rails 1.2.3 で調べました.



明示的に mongrel を使う場合の例です.

$ ruby script/server mongrel
=> Booting Mongrel (use 'script/server webrick' to force WEBrick)
=> Rails application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment...

mongrel の部分は

の 3 つが指定可能です.

使用するサーバを指定しない場合の例です.

$ ruby script/server

この場合、使用されるサーバの優先順位は

  1. lighttpd
  2. mongrel
  3. webrick

の順番になります.

この仕組みは script/server の

require 'commands/server'

上記 require により、$(gem)/rails-1.2.3/lib/commands/server.rb がロードされ、以下のコードが評価されることによりサーバの選択が行なわれます.

server = case ARGV.first
  when "lighttpd", "mongrel", "webrick"
    ARGV.shift
  else
    if defined?(Mongrel)
      "mongrel"
    elsif RUBY_PLATFORM !~ /(:?mswin|mingw)/ && !silence_stderr { `lighttpd -version` }.blank? && defined?(FCGI)
      "lighttpd"
    else
      "webrick"
    end
end

引数が指定されていて "lighttpd", "mongrel", "webrick" に該当した場合(whenのルートの場合)、引数のサーバが使用されることがわかります。
また、引数が指定されない場合(elseのルートの場合)、

  1. クラス Mongrel が指定されていれば mongrel
  2. ウィンドウズではなく(mswin または mingw)、lighttpd がシステムに存在すれば lighttpd
  3. 上記以外は webrick

の順番で評価されていることがわかります。