这个问题是关于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 /齿条/ 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
我的问题是:中间件方法如何工作?
答案 0 :(得分:1)
尽管有外观,该方法不仅返回空白哈希。 Hash.new
constructor接受参数,并在缺少指定键时返回默认值。例如:
h=Hash.new([1])
h[:missing_key]
=> [1]
build_app
方法正在调用middleware[options[:environment]]
。因此,如果指定的环境不存在,它至少会返回一组最小的中间件。