Hatena::ブログ(Diary)

はけの徒然日記 このページをアンテナに追加 RSSフィード

2005 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 08 | 09 | 10 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 |
2011 | 01 | 02 | 03 | 04 | 11 | 12 |
2012 | 02 | 03 | 05 |
2014 | 02 | 03 | 04 | 05 | 12 |
2015 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 04 | 05 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 |

2006-08-30(Wed)

Rubyでhttpサーバー

プログラミングRuby 第2版 言語編を読んでいてRubyWEBrickを使用するとhttpサーバーを作ることができるということを知ったので実験。

後述のサイトを参考にして、/home/zaurus/Documents/ruby/webrickを基準ディレクトリして、ここにサーバースクリプトを置きログもここに作成。htmlサブディレクトリを作成してDocumentRootに指定、ここにindex.htmlを置く。またcgiスクリプトcgi-binサブディレクトリに置く。ポートを2000にした。

/home/zaurus/Documents/ruby/webrick/httpd.rb
                                   /html/index.html
                                   /cgi-bin/test.cgi

起動は

$ cd /home/zaurus/Documents/ruby/webrick
$ ./httpd.rb &

停止はpsでpidを調べてkillする(もっと良い方法がありそう)

起動後webブラウザで以下のURLを閲覧するとhtmlファイルcgiスクリプトの出力を表示

http://localhost:2000/
http://localhost:2000/cgi-bin/test.cgi

なんかすごく簡単にhttpサーバーが出来てしまって驚きました。多分動作はapache等と比べると遅いとは思いますが、ちょっとした実験なんかには十分使用できると思います。WEBrickはもっといろいろなことが出来そうですが初心者向けのマニュアルが見つからないのと、httpの知識が無いので難しいかなぁ。

参考サイト

httpd.rb

access_log_streamがcloseしてないのが、ちと気持ち悪いです。

#!/usr/bin/env ruby
require 'webrick'
include WEBrick


PATH = '/home/zaurus/Documents/ruby/webrick'

def start_webrick( config = {} )
#	config.update
	server = HTTPServer.new(config)
	yield server if block_given?
	['INT', 'TERM'].each do |signal|
		trap(signal) {
			server.shutdown
		}
	end
	server.start
end

access_log_stream = File.open("#{PATH}/access.log", 'w')
cgi_dir = PATH + '/cgi-bin'

start_webrick(
	:DocumentRoot => PATH + '/html' ,
	:Port => 2000 ,
	:Logger =>  WEBrick::Log.new('sys.log', WEBrick::Log::DEBUG) ,
	:AccessLog => [[access_log_stream, AccessLog::COMBINED_LOG_FORMAT]]
){ |server|
	server.mount('/cgi-bin', HTTPServlet::FileHandler, cgi_dir, {:FancyIndexing => true})
}

index.html

<html>
<head>
<title>Title</title>
</head>
<body>
Hello Ruby HTTPServer World<br>
<p>
</body>
</html>

test.cgi

一行目はenvを使用しないでrubyへのパスを直接記述

#!/home/QtPalmtop/bin/ruby

print "Content-type: text/plain\r\n\r\n"
print "Ruby CGI Outputs\r\n"

asaasa_mixasaasa_mix 2006/08/30 22:02 ご存じかもしれませんが、Ruby on Rails は WEBrick 前提の Web アプリケーションフレームワークなんですねぇ。よって、Ruby on Rails な環境を構築した場合は一般的な Web Server 不要です(3000番ポート規定値で自動起動しますから)。

# 知らなかったので IIS や Apache の事前準備に時間をかけすぎ、拍子抜けしました。

hakehake 2006/08/31 05:53 あらためてRubyってスゴイ!
ただ実際のところ全てRubyで行って動作が重くなるってこと無いのでしょうかね。
サーバーの処理能力が高ければ問題ないのかな?

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/hake/20060830/p1