2008年12月22日月曜日

WEBrick::HTTPServlet::FileHandlerでエイリアス?を加えてみました。

こんにちは。モリモルです。

前回はWEBrick::Logでログをファイルに出力しました。
今回は、WEBrick::HTTPServlet::FileHandlerクラスで、Apacheでのエイリアスっぽいものを加えてみようと思います。

FileHandlerは、「通常のファイルサーバとしての機能を提供するためのサーブレット。 」とのことですので、こんな使い方はしないのかもしれませんが、、とりあえずやってみます。

前回からディレクトリ構成を変更しました。
------------------------------------------------------------

var2
`-- www
|-- html
| `-- index.html <----DocumentRoot
|-- image
| `-- foo.jpg
`-- logs
`-- log

------------------------------------------------------------
DocumentRootをwww/htmlにして、画像フォルダwww/imageを/imageでエイリアスしてみたいと思います。



www/html/index.html
------------------------------------------------------------

1 <html>
2 <body>
3 <img src="/image/foo.jpg"> <----/imageでアクセス
4 </body>
5 </html>

------------------------------------------------------------

server.rb
------------------------------------------------------------

1 #!/usr/local/bin/ruby
2
3 require 'webrick'
4 include WEBrick
5
6 logger = Log.new("/var2/www/logs/log", BasicLog::DEBUG)
7
8 server = HTTPServer.new(
9 :DocumentRoot => "/var2/www/html",
10 :Port => 20080,
11 :BindAddress => "192.168.207.128",
12 :Logger => logger )
13
14 server.mount("/image", HTTPServlet::FileHandler, "/var2/www/image")
15
16 trap("INT"){server.stop}
17
18 server.start

------------------------------------------------------------
青色の部分が今回追記した箇所です。
その他ログなどのパスは、適宜変更してあります。
HTTPServer#mountの第一引数で指定したディレクトリで、FileHandlerオブジェクトをマウントしています。
このFileHandlerオブジェクトですが、
/imageにアクセスがあるたびに、HTTPServerオブジェクトがFileHandler.newを呼び出し生成するようです。
その際に、FileHandler.newには、引数としてHTTPServer#mountの第三引数"/var2/www/image"が渡されます。

では、ブラウザからアクセスしてみます。


エイリアスのパスで、画像が表示できました。

WEBrick::HTTPServletには、ほかにも、CGIHandler、ERBHandlerなどがあるようですので、
次回はそちらを試してみようと思います。
ではでは。