call(env) status, headers, body = @app.call(env) ! if !headers['Content-Length'] headers['Content-Length'] = body.length end ! [status, headers, body] end end A header
app instance_eval(&block) end ! def use(middleware) @use.push ->(app) { middleware.new(app) } end ! def call(env) @use.reverse.inject(@app) { |app, middleware_builder| middleware_builder.call(app) }.call(env) end end ! built = Rack::Builder.new(app) do use Rack::Logger use Rack::ContentLength use Rack::Runtime end ! Rack::Handler::Thin.run(built)