この質問は、Rails のソース コードに関するものです。
railties/lib/rails/commands/server.rb ( Rails )で定義されているミドルウェアメソッドに気付きました
def middleware
middlewares = []
middlewares << [Rails::Rack::Debugger] if options[:debugger]
middlewares << [::Rack::ContentLength]
Hash.new(middlewares)
end
空のハッシュ {} を返すと思います。lib/rack/server.rbで定義されている同じ名前のメソッドをオーバーライドします。
私が正しくトレースした場合、このメソッドはlib/rack/server.rb ( Rack )で定義されたbuild_appによって呼び出されます
def build_app(app)
middleware[options[:environment]].reverse_each do |middleware|
middleware = middleware.call(self) if middleware.respond_to?(:call)
next unless middleware
klass, *args = middleware
app = klass.new(app, *args)
end
app
end
私の質問は次のとおりです。ミドルウェア方式はどのように機能しますか?