Rack 導入
Rack とは何なのか?
Rack
Rack の公式リポジトリ
- https://github.com/rack
- https://github.com/rack/rack # readme.md は一度目を通すと良い
- https://github.com/rack/rack/wiki # チュートリアルがある
Rack に関する体系的なドキュメント
Rack の前提知識(readme.md を読んでみた)
github に書かれている Rack の readme から、個人的に気になったポイントをつらつらと書きだしてみる。
まず Rack は、Web esrver と Web application の間に立って、お互いがやり取りできるようにするソフトウェア。イメージ的には以下の様な感じ。
Web server ←→ Rack ←→ Web application
Rack には、たくさんのミドルウェアが用意されているらしい。readme で紹介されていたものから、覚えておいたほうがよさそうなのは次のもの。
- Rack::CommonLogger
- Apache ライクなログファイルを作ってくれる
- Rack::ShowException
- クラッシュ時に、有用なバックトレースを吐き出してくれる
次のヘルパーを覚えておくと、Rack アプリケーションを構築する上で役に立つらしい。
- Rack::Request
- HTTP リクエストをラップして、使いやすくしてくれる。テストには Rack::MockRequest を使うと良いらしい。
- Rack::Response
- HTTP レスポンスの構築作業を助けてくれる。
チュートリアル2(What is Rack::Builder ?)
Rack::Builder は Rack に含まれているライブラリ、ヘルパー的な存在。
ユーザーは Rack と一緒に Rack::Builder も使うことが出来る。これを使うことで、
素の Rack をそのまま使うよりも、ちょっとだけ色々なことが便利にできるようになるという話しらしい。
Rack::Builder に関するチュートリアルで解説されているのは、次の2つのインスタンスメソッド。
- Rack::Builder#use
- Rack::Builder#map
Rack::Builder#use
use メソッドは、Ruby の require に近い役割を果たす。
例えば、Rack::CommonLogger を使えるようにするには、次のようなコードを記述すれば OK らしい。
# Original → http://m.onkey.org/ruby-on-rack-2-the-builder infinity = Proc.new {|env| [200, {"Content-Type" => "text/html"}, env.inspect]} builder = Rack::Builder.new do use Rack::CommonLogger run infinity end Rack::Handler::Mongrel.run builder, :Port => 9292
Rack::Builder#map
map メソッドは、Ruby on Rails で言うところの URI ルーティングのような機能をサポートしてくれる。
'/' という URI と、'/version' という URI へアクセスがあったときの処理を記述する方法は、以下の通り。
infinity = Proc.new {|env| [200, {"Content-Type" => "text/html"}, env.inspect]} builder = Rack::Builder.new do use Rack::CommonLogger map '/' do run infinity end map '/version' do run Proc.new {|env| [200, {"Content-Type" => "text/html"}, "infinity 0.1"] } end end Rack::Handler::Mongrel.run builder, :Port => 9292
Rack の lobster(ロブスター)
- ロブスターをお試し下さい
- require 'rack/lobster'
- Rack をインストールしたときについてくる、Rack アプリケーションのサンプルらしい。
- https://github.com/rack/rack/tree/master/example
Rack のテスト
- Rack のテストには「ベーコン・テスティング・フレームワーク(the bacon testing framework)」を使う。
- 素敵な名前!