2010年5月30日日曜日

RubyでWebサーバを作る

最近全然書いてないな~ということで、RubyでWebサーバを簡単に作れるライブラリ、WEBrickについて書いてみる。


Ruby 1.8以上なら、


require "webrick"
WEBrick::HTTPServer.new(:Port => 3939, :DocumentRoot => ENV["HOME"]).start


たったこれだけで、TCPポート3939番に自分のHOMEディレクトリを公開してしまう、とんでもないWebサーバが出来上がる。Ruby on Railsで有名になったライブラリだが、Apacheを使うまでもない、実験用Webサーバが欲しい時などにもとっても便利。



・ CGIを利用する
拡張子を.cgiとしたファイルに実行属性を加えるだけ。

http.mount(Webサーバ上でのパス, WEBrick::HTTPServlet::CGIHandler, CGIとして実行するファイルのパス)

としてマウントすることもできる。


・VirtualHostを利用する
メインのHTTPServerに、別のServerNameを設定したオブジェクトをvirtual_hostとして渡す。
メイン以外のホストは、:Portをnil、:DoNotListenをtrueとする。

http = WEBrick::HTTPServer.new(:ServerName => "miku.hachune.net", :DocumentRoot => "miku/")
http.virtual_host(WEBrick::HTTPServer.new(:ServerName => "append.haachune.net", :DocumentRoot => "append/", :Port => nil, :DoNotListen => true))
http.start



・各ユーザのホームディレクトリの特定のディレクトリを公開する
/home/$USER/public_htmlを公開する場合、DocumentRootOptionsのUserDirを設定する。

:DocumentRootOptions => {
:UserDir => "public_html"
}



・MimeTypeを追加する
デフォルトで設定されているMimeTypesにマージする。

newmime = {"wav"=>"Audio/wav"}
mime = WEBrick::HTTPUtils::DefaultMimeTypes.merge(newmime)
WEBrick::HTTPServer.new(:DocumentRoot => ENV[HOME], :MimeTypes => mime).start



・indexが存在しない場合の、ファイル一覧を表示しないようにする

:DocumentRootOptions => { :FancyIndexing => false }



・最大クライアント数を制限する

:MaxClients => クライアント数



・アクセスできるファイル/ディレクトリを制限する
DocumentRootOptionsのNondisclosureNameに、公開したくないファイル/ディレクトリ名を配列で指定する。
ワイルドカードが使用可能。

:DocumentRootOptions => {
:NondisclosureName => [".ht*", "*~", ".svn"]
}



・他のURLに転送する

http = WEBrick::HTTPServer.new(:Port => 3939)
http.mount_proc("/"){|req, res|
res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, 'http://hachune.net/')
}



・Cookieを渡す

http = WEBrick::HTTPServer.new(:Port => 3939)
http.mount_proc("/"){|req, res|
res["Set-Cookie"] = "hatsune=miku;Max-Age=3600;"
res.body = "<p>Cookieです。</p>"
}



・erb(組み込みRuby)を使う
WEBrickでは、HTMLファイルにRubyスクリプトを埋め込み、実行することも簡単にできる。

まず、MimeTypeにrhtmlをtext/htmlとして追加する。

:DocumentRootOptions =>{
:MimeTypes => WEBrick::HTTPUtils::DefaultMimeTypes.merge({"rhtml"=>"text/html"})
}

後は、拡張子をrhtmlとしたファイルに、
<%= Time.now.to_s %>
のように、必要な場所に埋め込む。


・指定された拡張子(cgi、rhtml)以外のファイル(rb、html)でCGIやerbを有功にする
require "webrick"の下あたりに以下の内容を記入しておく。
拡張子に合わせて、MimeTypeの設定も必要かもしれない。

module WEBrick::HTTPServlet
WEBrick::HTTPServlet::FileHandler.add_handler('rb', WEBrick::HTTPServlet::CGIHandler)
WEBrick::HTTPServlet::FileHandler.add_handler('html', WEBrick::HTTPServlet::ERBHandler)
end



他にもいろいろあるけれど、とりあえず一番必要とされそうな所だけ。
そのうちlogに関して等も追記する…と思う。

2010年5月3日月曜日

はつねさんAppendをサーバに入れてみた

こーのーいーえの~ こーのさーばぁが~♪
わたしっの~ あたらっしぃ~ いばーしょーなの~♪


…ということで、AppendはつねさんをWindows Server 2008 R2なはつねサーバにインストールしてみた。

インストール中
まぁ、以前から何度も試しているだけあって、今回も何の問題もなくインストールは進み…

インストールが成功しました!

Twitterでクリプトンの人が「インストールに20分ぐらいかかるかもしれません!」と言っていた割に、10分で終了。
まだまだPhenom X4 9750なはつねサーバはメインで現役だね(`・ω・´)シャキーン



歌ってもらった感じも、今のところ全く問題なし。
…スタンドアロンでしか試してないけど。



※おまけ
Appendはつねさんの着メールボイス的なものと、
Append聴き分けテスト的なもの
http://append.hachune.net

2010年5月2日日曜日

Amazon先生から何かが送られてきた

はちゅねさんはQRコードが気になるようです。
Amazonから荷物が届いた。コンビニ振込み14400円。



あぺんど!

キタ━━━━(゚∀゚)━━━━ !!!!!
キタ━━━ヽ(ヽ(゚ヽ(゚∀ヽ(゚∀゚ヽ(゚∀゚)ノ゚∀゚)ノ∀゚)ノ゚)ノ)ノ━━━!!!!
キタ━ヽ(=゚ω゚)人(*^ー゚)人(´・ω・`)人( ´∀`)人( ;´Д`)人(゚∀゚)人(´-`)ノ━━!!



そしてこれまでにない箱と内容物の豪華さ。
はつねさんの時はふつーのDVDケースに紙が数枚、って感じだったんだよな…
それが今回は、結構厚めの取説と、マウスパッド的なものまで入ってたり…(*´д`*)

見てみたい? ならAppend買おうね!(ぁ





使用許諾契約書。
これを守ってさえいれば、はつねさんはうちの子でいてくれるのである。



1+6つの表情を持つはつねさん。夢が広がるな…'`ァ,、ァ(*´Д`*)'`ァ,、ァ