how rails override the middleware method defined by rack?
这个问题是关于rails源代码的。
我注意到在railties / lib / rails / commands / server.rb(Rails)中定义的中间件方法
1 2 3 4 5 6 | def middleware middlewares = [] middlewares << [Rails::Rack::Debugger] if options[:debugger] middlewares << [::Rack::ContentLength] Hash.new(middlewares) end |
我认为它返回一个空的哈希{}。它会覆盖具有相同名称的方法,该方法在
lib /机架/server.rb
如果我跟踪正确,此方法由build_app调用,该方法在lib / rack / server.rb(机架)中定义
1 2 3 4 5 6 7 8 9 | 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 |
我的问题是:中间件方法如何工作?
尽管出现了该方法,但它不仅返回空白哈希。
1 2 3 | h=Hash.new([1]) h[:missing_key] => [1] |