Sinatra触ってると出てくるRackって何?
Sinatra
を触ってると、Rack
がいろんなところで出てくるが、いまいちわからないので調べた。
Rackとは
ミドルウェアである
別のアプリケーションをラップして、リクエストやレスポンスの加工、処理を切り替える。
WSGIに影響された
WSGIとは,PythonのためのWebサーバとWebアプリケーション/フレームワーク間の標準インターフェースを定める「仕様」です。(中略)
両者間の標準インターフェースが提唱され,WSGIに対応しているフレームワークと,WSGIを介して連携できるWebサーバとをユーザが好みの組み合わせで使えるようになったのです。(中略)
RackはこのWSGIに影響されて開発された,Rubyにおけるサーバとアプリケーション/フレームワーク間のインターフェースの役割を果たすライブラリです。「インターフェースが統一されていれば,サーバやフレームワークの組み合わせは自由である」
第23回 Rackとは何か(1)Rackの生まれた背景:Ruby Freaks Lounge|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メソッドは次の要素を含むレスポンスを返すること
- ステータスコード
- レスポンスヘッダ(Hash)
- レスポンスボディ(Array)
参考ページ
以下のページを参考にしました。
Related contents
TECH
2012.03.05
TECH
2012.04.19
TECH
2012.04.03
TECH
2012.03.21
TECH
2012.03.20
TECH
2012.03.06
TECH
2012.03.04
TECH
2012.02.29