rackで学ぶフレームワーク作り#1 - Rackアプリの実行の流れ

bin/rackupのコードを読んでみる。これがRackアプリを起動するスクリプト

ruファイルを読み込んで、Rack::Builderでapp生成して、CGIとかのHandlerでrunというのがrackupの実行の流れ。

ru(config)よんでRack::Builderでmiddlewareとか組み立てる。

if config =~ /\.ru$/
  cfgfile = File.read(config)
  if cfgfile[/^#\\(.*)/]
    opts.parse! $1.split(/\s+/)
  end 
  require 'rack'
  inner_app = eval "Rack::Builder.new {( " + cfgfile + "\n )}.to_app",
                   nil, config

appを実行するserver取得。cgi, webrickとかのhandler。

server = Rack::Handler.get(server)

developmentなどのモードじゃなかったらそれがappとして扱われる。

when "none"
  app = inner_app

serverでapp実行

server.run app, options

ruファイルは、以下のような感じ。middlewareをuse, rackアプリをrunみたいな感じでかかれています。Rack::ShowExceptionsがmiddleware, Rack::Lobsterがrackのアプリ。

use, runはDSLなんでしょうね。

require 'rack/lobster'

use Rack::ShowExceptions
run Rack::Lobster.new

では次は続いてどうも肝になりそうなRack::Builderを読んでいきます。