札幌ruby会議03のlt
TRANSCRIPT
4 Dec. 2010
たまにはcgi.rbのことでも話してみる
xibbar / 藤岡岳之
札幌Ruby会議03 LT
2010年12月10日金曜日
cgi.rbのキホン
cgiをrequireし、インスタンスを作る。 CGI#outで引数にヘッダ情報を与えて、ボディーはブロックでStringを渡すと
出力される。2010年12月10日金曜日
(続)cgi.rbのキホン
こんな感じで出力される。2010年12月10日金曜日
ヘッダをplainにすると
ヘッダのContent-Typeをわざとplainにしてみると・・・
2010年12月10日金曜日
(続)plainにすると、、
素で出力される(あたりまえだけど)2010年12月10日金曜日
ちなみにコンソールでは
こんな感じで、ヘッダが出力されて、そのあとボディーが出力される。
% 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日金曜日
rackとは?
Ruby on Railsやsinatraなどで使われている、ウェブアプリケーションゲートウェイRubyにも採用してほしいと言われたけど、ドキュメントが貧弱だということもあってペンディング状態(gemでいんじゃないの?と言われている。)cgi以外にもpassengerとかでも動く
2010年12月10日金曜日
rackの書式
envをうけて、配列を返すcallというメソッドがあるオブジェクトを
ハンドラに渡す
2010年12月10日金曜日
rackでの出力結果
こんなふうに出力される。(当然)2010年12月10日金曜日
rakugakiっての作った
cgi.rbとの違いは、requireの部分のみ
2010年12月10日金曜日
rakugakiの結果
変わらないように見える2010年12月10日金曜日
rakugaki.rbの中身
require ‘rack’して、includeしてrackをとりこみ、CGIクラスをrackで実装している。initializeでは初期化するだけ。
2010年12月10日金曜日
(続)rakugaki.rbの中身
考え方として、CGI#outでは出力をするのではなく、出力する処理を定義するもの。
つまり、@bodyに出力したいブロックを代入してとっておく。
そして、ハンドラーにselfを渡す(cgiの場合だけです。)
2010年12月10日金曜日
(続々)rakugaki.rb
ハンドラーがオブジェクトのcallを呼ぶ。前処理をして、最後に@body.callしているのばミソ
2010年12月10日金曜日
rakugakiを使う留意点
出力はすべて、CGI#outを使う
こと2010年12月10日金曜日
全部CGI#outにしてみたら
2010年12月10日金曜日
tDiaryもみえた
POSTがまだバグっていて更新はできなかったけど。
2010年12月10日金曜日
さらに
2010年12月10日金曜日
passengerでも動いた
まだバグっていて更新はできないけどな。
2010年12月10日金曜日
passengerで動かすには
publicとtmpのディレクトリが必要publicは.にシンボリックリンクでイケタ
config.ruが必要index.rbをまるごとdef endでくくって、config.ruのprocから呼び出すという、ブロックにしちゃいました。
2010年12月10日金曜日
パフォーマンスチェック
cgi passenger
Requests per second: 2.03 [#/sec] 3.41 [#/sec]
まあこんなもんか。
さっきのサイトでパフォーマンステスト
2010年12月10日金曜日
まとめRubyのブロックすごすぎる。
CGI#outのブロックをハンドラーからcallされるまで
とっておけるなんて。2010年12月10日金曜日
rakugakiとは
Rack Gate CGI=>
rakugaki
と命名してみた次第 おわり
2010年12月10日金曜日