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