※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

Rack

WEBアプリケーションサーバ抽象


http://rack.rubyforge.org/ http://labs.unoh.net/2007/05/rackweb.html http://blog.hacklife.net/archives/51439023.html


動作まとめ http://d.hatena.ne.jp/authorNari/20080304/1204621583

http://chneukirchen.org/blog/archive/2007/02/introducing-rack.html

http://m.onkey.org/2008/11/17/ruby-on-rack-1

http://m.onkey.org/2008/11/18/ruby-on-rack-2-rack-builder



JSONP http://actsasflinn.com/2008/06/16/json-p-rack-handler

Rack-contrib (ミドルウェアまとめ) http://github.com/rtomayko/rack-contrib/tree/master

    • そのままだと json コンパイルしないといけないので変わりに json_pure を使う方法
サイトからrack-contrib ダウンロード
展開した中の .gemspecを開いて 47行目あたりの s.add_dependency 'json' を 'json_pure' に変更
展開したファイルを<ruby_gems_root>/gems/rack-contrib-0.4.0にコピー
先ほど編集した.gemspecファイルを<ruby_gems_root>/specifications/rack-contrib-0.4.0.gemspec にコピー
足りない gem をインストール 
rake test => 幸せ(sendfileはwindowsのファイルパスに対応していなげ)

rack-cache http://github.com/rtomayko/rack-cache/tree/master

rack-config http://github.com/jcrosby/rack-config/tree/master

rack-auth-ip http://github.com/walf443/rack-auth-ip/tree/master

rack-jpmobile http://github.com/walf443/rack-jpmobile/tree/master

rack-javascript-minifier http://github.com/lucianopanaro/rack-javascript-minifier/tree/master

Rackの動作

  • rackup コマンドでWEBサーバの依存関係を吸収できる。
  • Rack::Builder.to_appが肝。


    • rack-0.3.0/bin/rackup
起動オプションとデフォルトポート9292
.ruファイルの読み込み
 Rack.new で該当WEBサーバ用の処理のためevalしてinner_appに。
デプロイ
 app = Rack::Builder.new{いろいろ,inner_app}.to_app
    • rack-0.3.0/lib/rack/builder.rb
初期化(initialize)
DSL(use run map)
to_app
 @insの最後の値がHashならRack::URLMap.newに置き換え。
 @insを最後から1つずつとりだす。
 取り出した(useした)オブジェクトのinitializeに引数で渡してnewする。(を繰り返す)
 (ExampleではShowExceptionsとCommonLogger。)
    • rack-0.3.0/lib/rack/handler/<WEBサーバ>.rb
self.runでto_appで積んだインスタンスのデプロイする。
リクエストがあった場合。
 WEBrickの場合service
 Mongrelの場合process
 SCGIの場合process_request
@app.callでHTTPレスポンスを作成してbodyに格納。
    • rack-0.3.0\lib\rack\showexceptions.rb例
callで再起呼び出し。
runまで例外なく処理が進むと<WEBサーバ>に処理を渡す。