Rackについて調べてみた(1)
「unicornはRackインターフェースに対応したHTTPサーバです」って書いてあったけど、 「Rackって何?」って感じなので調べてみた。大した内容じゃないですが。
Rackとは
以前は、動的なWebコンテンツを作る際には、CGIが使われていたそう。
しかし、
Webサーバー側で動作するプログラムがすべての処理を担当するため、多数のクライアントから処理要求が集中すると、どうしても処理が遅くなってしまいます。要求ごとにプログラムが起動されるため、サーバーの負荷が大きくなるのです。 http://www.grapecity.com/japan/powernews/column/web_app/009/page04.htm
とのこと。
そこで、CGIではなく、もっとフレームワークとWebサーバが深く連携するものが出てきた。
しかし、フレームワークとWebサーバ側が独自の仕様にすると、連携が片方に依存してしまう。
(例えば、このフレームワークを使うには、このサーバは使えないなど)
そこで、Rackが登場した。
Rackは、アプリケーションサーバとフレームワークをつなぐインタフェイス。
Rackに対応しているサーバやフレームワークであれば、
組み合わせを自由に選べることになった。すごい!!
Rackを使ってみる
Rackは、Webアプリケーションに必要な最低限のインタフェイスを定めている。
ちなみに、Rackに対応したものをRackアプリケーションと呼ぶ。つまり、RailsもRackアプリケーション。
Rackのインタフェイスであるには、
- callメソッドをもっていること
- callメソッドは引数として、Webサーバからのリクエストを受けること
- 返り値として、3つの要素(ステータス、ヘッダ、ボディ)をもつ配列を返すこと
である必要がある。逆に言えばこれだけ。
実例。
simpleapp.rb
class SimpleApp def call(env) p env case env['REQUEST_METHOD'] when 'GET' [ 200, { 'Content-Type' => 'text/html' }, ['<html><body><form method="POST"><input type="submit" value="見たい?" /></form></body></html>'] ] when 'POST' [ 200, { 'Content-Type' => 'text/html' }, ['<html><body>何見てんだよ</body></html>'] ] end end end
config.ru
require ‘./simpleapp' run SimpleApp.new
以下で実行する
$ rackup
で表示。
続きは、またこんど。
参考URL
http://gihyo.jp/dev/serial/01/ruby/0023 http://rack.rubyforge.org/doc/Rack.html