[英]how rails override the middleware method defined by rack?
這個問題是關於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
我的問題是: 中間件方法如何工作?
盡管出現了該方法,但它不僅返回空白哈希。 Hash.new
構造函數接受參數,並確保在缺少指定鍵的情況下返回默認值。 例:
h=Hash.new([1])
h[:missing_key]
=> [1]
build_app
方法正在調用middleware[options[:environment]]
。 因此,如果指定的環境不存在,則至少將獲得最少的中間件集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.