ワンライナーといかないまでも、1ファイルでそれなりに動くWebサーバが欲しかったのでRubyの標準ライブラリのWEBrickで書いた。
後述のコードを~/bin/webrick
あたりにコピーして実行権限を付けて起動する。要ruby。1.8系でも動く。
起動オプションとしては
-
-d
でデーモンとして起動する- 停止するときは
ps
とかからプロセスを調べてkillする
- 停止するときは
-
-p
でポート番号を指定する。デフォルトは8000 -
-r
でルートディレクトリを指定する。デフォルトはカレントディレクトリ -
-l
でアクセスログを出力するようになる。デフォルトはカレントディレクトリ直下のaccess.log
webrick
#!/usr/bin/env ruby
#
# -*- mode: ruby -*-
# vi: set ft=ruby :
require "optparse"
require "webrick"
include WEBrick
Process.setproctitle(File.basename(__FILE__)) if Process.respond_to?(:setproctitle)
options = {
:Port => 8000,
:DocumentRoot => Dir.pwd,
:BindAddress => "0.0.0.0",
}
OptionParser.new do |opt|
opt.on "-d", "--[no-]daemon" do |v|
options[:ServerType] = Daemon if v
end
opt.on "-p", "--port PORT", Integer do |v|
options[:Port] = v
end
opt.on "-r", "--root PATH" do |v|
options[:DocumentRoot] = v
end
opt.on "-l", "--log [PATH]" do |v|
v ||= "access.log"
path = File.expand_path(v, Dir.pwd)
f = File.open(path, "a")
f.sync = true
options[:AccessLog] = [
[f, WEBrick::AccessLog::COMBINED_LOG_FORMAT]
]
end
end.parse!(ARGV)
server = HTTPServer.new(options)
%w(INT TERM).each do |sig|
trap(sig) { server.shutdown }
end
server.start