require 'rack'
app = lambda { |env| [200, {"Content-Type" => "text/plain"}, ['Hello World!']] }
Rack::Handler::Mongrel.run(app, :Port => 3000)
env
引数は、環境変数および要求パラメーターのハッシュ値を含んでいる。ブロックの戻り値は、HTTPステータスコード、ヘッダーおよび応答のボディの3つのエレメントの配列で構成される。
Rackの作成者であるChristian Neukirchen氏が、Rackの変遷についてInfoQに語った。
当初、RubyのWebフレームワークに不満を感じていたので、自分自身で記述する考えをいくつかひねり出した。web.py(サイト・英語)がリリースされ、小さく簡単 に保持できるところが気に入った。そこでフレームワークの記述を始めたが、成果が得られなかった。Cookieの解析などのいつもの記述などをして本筋か らそれてしまったからだ。実際には、他のプロジェクトからコードをコピーしたが、仕上げるまではかなり退屈な作業だった。そんなわけで、そのフレームワー クは決してうまくいかなかった。
その後、Python's Nevow(source)について知り、それと同種のものを実装してみたくなったが、始めるとすぐにサーバごとにヘルパーやアダプタをひたすら書き換え続けていることに 気づいた。Pythonフレームワークについてさらに詳しくなると、WSGI(source)、read、liked、simplifiedそして最終的にdrafted Rackにたどり着いた。すでに記述したコードを再アセンブルし、Python Paste(サイト・英語)の構造に基づいてモジュール方式にした。すると間もなくRack 0.1の準備が整った。
Rackが使用可能だった時、気に入ったフレームワークがなかったので、Coset(source)を実装した。それについてはわたしがこの頃使用しているものである。Camping(source)、web.py(サイト・英語)およびRESTlet(サイト・英語)からインスピレーションを描く。 Rackのサポートをするフレームワークのリスト(サイト・英語)を以下に挙げる。 * Camping(source)(Rackの分配に含まれる) * Coset(source) * Halcyon(サイト・英語) * Maveric(source) * Merb(サイト・英語) * Mack(サイト・英語) * Racktools::SimpleApplication * Ramaze(サイト・英語) * Rails(サイト・英語) (第三者、Thinで配送) * Sinatra(サイト・英語) * Vintage(サイト・英語) Rackは、フレームワークと一緒に使用することも可能である。たとえば、ある要求でシンプルかつ高速処理が必要な場合、RackのRack:: Cascadeを使用して複数のアプリケーションをカスケードすることができる。Ezra Zygmuntowicz氏によるブログ記事では、完全にmerbスタックを経由せずに、Rackを使用したファイルのアップロードの方法を紹介してい る(source)。 今後に向けて、Christian氏は1.0リリース仕様の安定化を計画している。 Rackについての詳細は、Rackの公式Webサイト(サイト・英語)を参照のこと。詳細情報に関しては、Rackの内部構造についてまとめたEuruko 07による文書(PDF・英語)が利用可能である。 原文はこちらです‥http://www.infoq.com/news/2008/04/rack-http-web