札幌ruby会議03のlt

23
4 Dec. 2010 たまにはcgi.rbのことでも 話してみる xibbar / 藤岡岳之 札幌Ruby会議03 LT 20101210日金曜日

Upload: xibbar

Post on 14-May-2015

615 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 札幌Ruby会議03のlt

4 Dec. 2010

たまにはcgi.rbのことでも話してみる

xibbar / 藤岡岳之

札幌Ruby会議03 LT

2010年12月10日金曜日

Page 2: 札幌Ruby会議03のlt

cgi.rbのキホン

cgiをrequireし、インスタンスを作る。 CGI#outで引数にヘッダ情報を与えて、ボディーはブロックでStringを渡すと

出力される。2010年12月10日金曜日

Page 3: 札幌Ruby会議03のlt

(続)cgi.rbのキホン

こんな感じで出力される。2010年12月10日金曜日

Page 4: 札幌Ruby会議03のlt

ヘッダをplainにすると

ヘッダのContent-Typeをわざとplainにしてみると・・・

2010年12月10日金曜日

Page 5: 札幌Ruby会議03のlt

(続)plainにすると、、

素で出力される(あたりまえだけど)2010年12月10日金曜日

Page 6: 札幌Ruby会議03のlt

ちなみにコンソールでは

こんな感じで、ヘッダが出力されて、そのあとボディーが出力される。

% ruby hello1.rb </dev/nullContent-Type: text/plainContent-Length: 154

<html><head><title>札幌Ruby会議03</title></head><body><h1>たまにはcgi.rbのことでも話してみる</h1><h2>xibbar</h2></body></html>

2010年12月10日金曜日

Page 7: 札幌Ruby会議03のlt

rackとは?

Ruby on Railsやsinatraなどで使われている、ウェブアプリケーションゲートウェイRubyにも採用してほしいと言われたけど、ドキュメントが貧弱だということもあってペンディング状態(gemでいんじゃないの?と言われている。)cgi以外にもpassengerとかでも動く

2010年12月10日金曜日

Page 8: 札幌Ruby会議03のlt

rackの書式

envをうけて、配列を返すcallというメソッドがあるオブジェクトを

ハンドラに渡す

2010年12月10日金曜日

Page 9: 札幌Ruby会議03のlt

rackでの出力結果

こんなふうに出力される。(当然)2010年12月10日金曜日

Page 10: 札幌Ruby会議03のlt

rakugakiっての作った

cgi.rbとの違いは、requireの部分のみ

2010年12月10日金曜日

Page 11: 札幌Ruby会議03のlt

rakugakiの結果

変わらないように見える2010年12月10日金曜日

Page 12: 札幌Ruby会議03のlt

rakugaki.rbの中身

require ‘rack’して、includeしてrackをとりこみ、CGIクラスをrackで実装している。initializeでは初期化するだけ。

2010年12月10日金曜日

Page 13: 札幌Ruby会議03のlt

(続)rakugaki.rbの中身

考え方として、CGI#outでは出力をするのではなく、出力する処理を定義するもの。

つまり、@bodyに出力したいブロックを代入してとっておく。

そして、ハンドラーにselfを渡す(cgiの場合だけです。)

2010年12月10日金曜日

Page 14: 札幌Ruby会議03のlt

(続々)rakugaki.rb

ハンドラーがオブジェクトのcallを呼ぶ。前処理をして、最後に@body.callしているのばミソ

2010年12月10日金曜日

Page 15: 札幌Ruby会議03のlt

rakugakiを使う留意点

出力はすべて、CGI#outを使う

こと2010年12月10日金曜日

Page 16: 札幌Ruby会議03のlt

全部CGI#outにしてみたら

2010年12月10日金曜日

Page 17: 札幌Ruby会議03のlt

tDiaryもみえた

POSTがまだバグっていて更新はできなかったけど。

2010年12月10日金曜日

Page 18: 札幌Ruby会議03のlt

さらに

2010年12月10日金曜日

Page 19: 札幌Ruby会議03のlt

passengerでも動いた

まだバグっていて更新はできないけどな。

2010年12月10日金曜日

Page 20: 札幌Ruby会議03のlt

passengerで動かすには

publicとtmpのディレクトリが必要publicは.にシンボリックリンクでイケタ

config.ruが必要index.rbをまるごとdef endでくくって、config.ruのprocから呼び出すという、ブロックにしちゃいました。

2010年12月10日金曜日

Page 21: 札幌Ruby会議03のlt

パフォーマンスチェック

cgi passenger

Requests per second: 2.03 [#/sec] 3.41 [#/sec]

まあこんなもんか。

さっきのサイトでパフォーマンステスト

2010年12月10日金曜日

Page 22: 札幌Ruby会議03のlt

まとめRubyのブロックすごすぎる。

CGI#outのブロックをハンドラーからcallされるまで

とっておけるなんて。2010年12月10日金曜日

Page 23: 札幌Ruby会議03のlt

rakugakiとは

Rack Gate CGI=>

rakugaki

と命名してみた次第 おわり

2010年12月10日金曜日