Ruby on rails rails如何覆盖rack定义的中间件方法?

Ruby on rails rails如何覆盖rack定义的中间件方法?,ruby-on-rails,ruby,rack,Ruby On Rails,Ruby,Rack,这个问题是关于rails源代码的 我注意到railties/lib/rails/commands/server.rb(rails)中定义的中间件方法 我的问题是:中间件方法是如何工作的?该方法不只是返回一个空哈希,不管它的外观如何。如果缺少指定的键,则接受该参数并使其返回默认值。例如: h=Hash.new([1]) h[:missing_key] => [1] build\u app方法正在调用中间件[options[:environment]]。因此,如果指定的环境不存在,它至少会返

这个问题是关于rails源代码的

我注意到railties/lib/rails/commands/server.rb(rails)中定义的中间件方法


我的问题是:中间件方法是如何工作的?

该方法不只是返回一个空哈希,不管它的外观如何。如果缺少指定的键,则接受该参数并使其返回默认值。例如:

h=Hash.new([1])
h[:missing_key]
=> [1]
build\u app
方法正在调用
中间件[options[:environment]]
。因此,如果指定的环境不存在,它至少会返回一组最小的中间件

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
h=Hash.new([1])
h[:missing_key]
=> [1]