Warning.
Rubyで書かれたWebアプリケーションを動かす場合は、passengerや unicornを使うべきです。
wwwsrvは、土岐仁謙氏が公開している、Rubyで書かれたWebサーバーです。CGIやSSIも扱えます。
まず,アーカイブファイルを展開します。ファイル名は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