这个问题是关于 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中定义的同名方法
如果我追踪正确,这个方法由build_app调用,它在lib/rack/server.rb ( Rack )中定义
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
我的问题是:中间件方法是如何工作的?