【#100DaysOfCode】Day16 「作りながら学ぶRuby入門」23章
昨日はサボり。ついに途切れた
100日間連続でコードを書くことはできなかった
まあしゃーない
Day16
「作りながら学ぶRuby入門」23章 WEBrickでWebサーバを作る
今日のpoint
- プログラムをWebページの形(HTML)にする: 「テンプレート」を使う
- eRuby : テキストにRubyのプログラムを埋め込むための仕様
.erb | <% %>, 行頭に% をつける => Rubyのコードとして認識される |
- ターミナル: erb example.erb
WEBrickを使ったプログラムに対し、ERBを使えるように設定する手順
1. ERBHandlerへの関連付け
拡張子が 「.erb」の場合に、ERBHandlerに処理を任せるようにする
WEBrick::HTTPServlet::FileHandler.add_handler("erb", WEBrick::HTTPServlet::ERBHandler)
2. ERBでの処理結果をhtmlとみなすように設定
Webブラウザが .erb のファイルをURLで指定した場合,
HTMLで渡されるのと同じようになるように、Webブラウザに知らせる
# erbのMIMEタイプを設定 server.config[:MimeTypes]["erb"] = "text/html"
これらを踏まえて、WEBrickを使ったWebサーバープログラムが以下のようになる。
# 作りながら学ぶRuby入門 23章 require 'webrick' # WEBrickライブラリを使用 config = { :Port => 8099, :DocumentRoot => '.', # カレントディレクトリを表す } # 拡張子erbのファイルをERBを呼び出して処理するERBHandlerと関連付ける WEBrick::HTTPServlet::FileHandler.add_handler("erb", WEBrick::HTTPServlet::ERBHandler) # WEBrickのHTTP Serverクラスのサーバーインスタンスを作成する server = WEBrick::HTTPServer.new( config ) # erbのMIMEタイプを設定 server.config[:MimeTypes]["erb"] = "text/html" # Ctrl-C割り込みがあった場合にサーバーを停止する処理を登録しておく trap(:INT) do server.shutdown end # 上記記述の処理をこなすサーバーを開始する server.start
次に、このサーバーでデータベースの内容を照会して、
HTMLに成形するためのテンプレートのコードが以下のようになる。
<% require 'rubygems' # RubyGemsでインストールしたときには記述 %> <% require 'dbi' # DBIを使う %> <%# データベース'fruits01.db'に接続する %> <% dbh = DBI.connect( 'DBI:SQLite3:fruits01.db' ) %> <%# テーブルからデータを読み込んで表示する %> <%# select文の実行 %> <% sth = dbh.execute("select * from products") %> <html><body> <%# select文の実行結果を1件ずつrowに取り出し、繰り返し処理する %> <ul> <% sth.each do |row| %> <%# each_with_nameメソッドで値と項目名を1件分ずつ取り出して表示する %> <% row.each_with_name do |val, name| %> <li><%= "#{name}: #{val.to_s}" %></li> <% end %> <hr> <% end %> </ul> </body></html> <%# 実行結果を解放する %> <% sth.finish %> <%# データベースとの接続を終了する %> <% dbh.disconnect %>