Webrickのリファレンス にあるプログラムを動作させてみる。
Webrickは、Rubyに標準添付されるクラスライブラリの1つで、
基本的なWebサーバ機能を提供するもの。
クラスライブラリなので、
という簡単な手順(のプログラムを作成すること)で、サーバが起動できる。
組み込みライブラリではなく、添付ライブラリの1つなので、 使うに先立って ‘require’(使用宣言)しておくことが必要(右図)。
手順:
まず、コマンドプロンプトで、
where ruby
として出てきた、rubyインタプリタの場所(をフルパス名で表記したもの)を、
'
で囲み、Webサーバのコードの中の、WEBrick::HTTPServer.new
に渡す オプション(Hash型; ブレース
{ }
で囲んである)の中に、
:CGIInterpreter => 'C:/tools/ruby27/bin/ruby.exe'
# または
CGIInterpreter:'C:/tools/ruby27/bin/ruby.exe'
のように渡す。
また、動的コンテンツ生成の例として(CGIHandler経由で呼ばれることになるプログラム)‘view.rb’ については、 ここではこのファイルをダウンロードして、 ドキュメントルートと同じ場所に置いて)使って下さい。
webServer0.rb を参考にして下さい。 ただし、上記のruby.exeのパス名は、自分の環境にあったものに変えて使うこと。
(右図を参考に理解を試みて下さい)
require 'webrick'
= WEBrick::HTTPServer.new(
srv DocumentRoot:'./', BindAddress:'127.0.0.1',
Port:20080, CGIInterpreter:'C:/tools/ruby27/bin/ruby.exe')
.mount('/view.cgi', WEBrick::HTTPServlet::CGIHandler, 'view.rb')
srv.mount('/foo.html', WEBrick::HTTPServlet::FileHandler, 'hoge.html')
srvtrap("INT"){ srv.shutdown }
.start srv
アクセスしたURL | 動作 | |
---|---|---|
http://localhost:20080/ | => | / に対する応答は標準のルール(ルーティング)に従い |
DOCUMENTROOT/index.html (右図) | ||
http://localhost:20080/foo.html | => | (ファイルハンドラーによるルーティングに従い、) |
DOCUMENTROOT/hoge.html | ||
http://localhost:20080/view.cgi | => | (CGIハンドラーによるルーティングに従い、) |
DOCUMENTROOT/view.rb をプログラムとして実行した結果 | ||
http://localhost:20080/x.html | => | (それ意外の実在するファイルならば) |
DOCUMENTROOT/x.html |
C:\Users\nobu\Documents\class\BNS>WebServer1.rb
[2018-07-05 11:21:59] INFO WEBrick 1.3.1
[2018-07-05 11:21:59] INFO ruby 1.9.3 (2013-11-22) [i386-mingw32]
[2018-07-05 11:21:59] WARN TCPServer Error: Only one usage of each socket addre
ss (protocol/network address/port) is normally permitted. - bind(2)
C:/App/Ruby193/lib/ruby/1.9.1/webrick/utils.rb:85:in `initialize': Only one usag
e of each socket address (protocol/network address/port) is normally permitted.
- bind(2) (Errno::EADDRINUSE)
from C:/App/Ruby193/lib/ruby/1.9.1/webrick/utils.rb:85:in `new'
from C:/App/Ruby193/lib/ruby/1.9.1/webrick/utils.rb:85:in `block in crea
te_listeners'
from C:/App/Ruby193/lib/ruby/1.9.1/webrick/utils.rb:82:in `each'
from C:/App/Ruby193/lib/ruby/1.9.1/webrick/utils.rb:82:in `create_listen
ers'
from C:/App/Ruby193/lib/ruby/1.9.1/webrick/server.rb:82:in `listen'
from C:/App/Ruby193/lib/ruby/1.9.1/webrick/server.rb:70:in `initialize'
from C:/App/Ruby193/lib/ruby/1.9.1/webrick/httpserver.rb:45:in `initiali
ze'
from C:/Users/nobu/Documents/class/BNS/WebServer1.rb:2:in `new'
from C:/Users/nobu/Documents/class/BNS/WebServer1.rb:2:in `<main>'
このポート番号はすでに(最初に起動したWebサーバによって)掴まれているため(右図)、
後から起動したプログラムは同じポートを使用できず、異常終了する。
日本語には複数のエンコーディングがある
ネットでの主流は最近ではUTF8。 UTF8については、ファイル先頭部の BOM にも注意を払う必要がある。
テキストエディタによっては、扱えない形式もある。
主にエディタ向けの、マジックコメントが書ける(自動挿入される場合もある)。
転送時にHTTPヘッダーで指定されることがある。
HTMLテキストの中(先頭部)でも指示が行える。
それと別の問題として、OSによる差異が原因のトラブルが以下のように発生し得ることにも注意。