script/server で起動する web サーバを選択するには
気になったので調べてみたよログです.
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
この場合、使用されるサーバの優先順位は
の順番になります.
この仕組みは 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のルートの場合)、
- クラス Mongrel が指定されていれば mongrel
- ウィンドウズではなく(mswin または mingw)、lighttpd がシステムに存在すれば lighttpd
- 上記以外は webrick
の順番で評価されていることがわかります。