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を読んでいきます。