Sinatra触ってると出てくるRackって何?

移転しました。

Sinatraを触ってると、Rackがいろんなところで出てくるが、いまいちわからないので調べた。

以下のページを参考。

Rackとは、

ミドルウェアである。

別なアプリケーションをラップして、リクエストやレスポンスの加工、処理を切り替える。

WSGIに影響された。

WSGIとは,PythonのためのWebサーバとWebアプリケーション/フレームワーク間の標準インターフェースを定める「仕様」です。(中略)
両者間の標準インターフェースが提唱され,WSGIに対応しているフレームワークと,WSGIを介して連携できるWebサーバとをユーザが好みの組み合わせで使えるようになったのです。(中略)
RackはこのWSGIに影響されて開発された,Rubyにおけるサーバとアプリケーション/フレームワーク間のインターフェースの役割を果たすライブラリです。

「インターフェースが統一されていれば,サーバやフレームワークの組み合わせは自由である」
Ruby Freaks Lounge:第23回 Rackとは何か(1)Rackの生まれた背景|gihyo.jp … 技術評論社

rackupによって起動される。

app.rb等、ファイルの末尾に以下のコードを書き加えることで、app.rb単体でアプリケーションを起動できる。

if __FILE__ == $0
  require 'rack/handler/webrick'
  Rack::Handler::WEBrick.run SimpleApp.new, :Port => 9292
end

問題は、サーバ依存のコードが残ってしまうこと。
サーバとアプリケーションの間に、Rackが入ることによって、自由に組み合わせられるのメリットが失われてしまう。
だから、rackupによって、起動させる。

「基本的にはconfig.ruに色々書いて,アプリケーション側にはサーバ依存のコードは書かない」


以下のものが最低限必要。
  • callというメソッドを持っていること
  • callメソッドの引数としてWebサーバからのリクエストを受けること
  • callメソッドは,次の要素を含むレスポンスを返すること