wwwsrvのインストール

Warning.

以下で紹介しているwwwsrvは、もはやメンテナンスされていません。

Rubyで書かれたWebアプリケーションを動かす場合は、passengerや unicornを使うべきです。

wwwsrvは、土岐仁謙氏が公開している、Rubyで書かれたWebサーバーです。CGIやSSIも扱えます。

入手先
Rubyのページ

まず,アーカイブファイルを展開します。ファイル名はwwwsrv-x.y.z.tar.gz (x、y、zはバージョン番号)です。

$ tar xzvf wwwsrv-0.15.2.tar.gz 
$ cd wwwsrv-0.15.2

インストールする際に、古い版との互換性を維持するかどうかを選びます。新たにインストールするなら後方互換性を気にする必要はないので,install.rb に -rwwwsrv/not_compat オプションを付けます。

install.rb は対話式のインストーラなので,順次、質問に答えていきます。以下で、下線を付けているところが入力するところです。

/src/ruby/wwwsrv-0.15.2$ ruby install.rb --ruby-opts="-rwwwsrv/not_compat"
usage: ruby install.rb ([options])
options:
  -d, --debug  (not install)
  -h, --help
      --ruby-path=[ruby interpreter path]
      --ruby-opts=[ruby interpreter options]
      --bin-dir=[path to install ruby script]
      --lib-dir=[path to install ruby library]
install.rb:182: warning: Insecure world writable dir /src/ruby/wwwsrv-0.15.2, mode 040777
**** select a path of ruby interpreter ****
1. /usr/local/bin/ruby
number [1] or another input: 1
**** select a path to install ruby scripts ****
1. /usr/local/bin
2. /usr/bin
3. /bin
number [1-3] or another input: 1
**** select a path to install ruby libraries ****
1. /usr/local/lib/ruby/site_ruby
number [1] or another input: 1
**** settings ****
ruby path: /usr/local/bin/ruby
ruby options: -rwwwsrv/not_compat
script path: /usr/local/bin
library path: /usr/local/lib/ruby/site_ruby
install? [Yes/No]: yes

念のため,インストール先にきちんとファイルが配置されたか確認します。

$ which wwwsrv
/usr/local/bin/wwwsrv

次に設定ファイルを書きます。

wwwsrvの設定ファイルは,一見、普通のRubyスクリプトのようになっています。次に掲げる表のセクション区切りによりセクションに分かれ、それぞれが独立したRubyスクリプトのように振舞います。

セクション開始文字
__INIT__
__WARM_UP__
__HOST__
__SERVER__
__COOL_DOWN__
__FINAL__

ただし、先に実行されたセクションで定義された変数は,その後に実行されるセクションから参照できます。

設定ファイルのファイル名を wwwsrv-conf.rb とし、セクションごとに順に見ていきましょう。

__HOST__セクションでは、ホスト名、ポート番号、ログを出力するファイル名などを設定します。

__HOST__

PORT = 8000

__SERVER__セクションでは、公開するディレクトリ、CGI実行を許可するディレクトリ、拡張子とMIMEタイプとの対応、などを設定します。

機能ごとにライブラリが分かれているので、必要なライブラリをrequireで取り込んで、WWWsrv::LocalFileDocument インスタンスや WWWsrv::CGIdocument インスタンスを SERVERにmount() する、という手順を踏みます。SERVER.mount()は、渡されるインスタンスの型によっていろいろな動作を行います。

ディレクトリを公開する場合、公開するディレクトリを引数にしてWWWsrv::LocalFileDocumentインスタンスを生成し、それとURLパス名とをSERVER.mount()に渡します。特定のディレクトリでCGIを有効にする場合、CGIを動かすディレクトリを引数にしてWWWsrv::CGIdocumentインスタンスを生成し、SERVER.mount()には、URLパス名、{:mask => CGIプログラムの拡張子}を渡します。

__SERVER__

# ローカルファイル

require "wwwsrv/local"

root = WWWsrv::LocalFileDocument.new("/cygdrive/d/home/hori/wwwsrv-root")
SERVER.mount(root, "/")

local_public_dir = "/cygdrive/d/home/hori/public_html"

home = WWWsrv::LocalFileDocument.new(local_public_dir)
SERVER.mount(home, "/~hori")

# CGI有効

require "wwwsrv/cgi"

cgi = WWWsrv::CGIdocument.new(local_public_dir)
SERVER.mount cgi, "/~hori", {:mask => %r!\.(cgi|rb|pl)(/|$)!}

wwwsrvの--configオプションで,wwwsrvの設定ファイルを指定します。

$ wwwsrv --config=wwwsrv-conf.rb