给定config.ru
# Special care taken to load before even requiring the rails app
require './test_middleware.rb'
use TestMiddleware
require ::File.expand_path('../config/environment', __FILE__)
run Rails.application
和
test_middleware.rb
require 'byebug'
class TestMiddleware
def initialize(app)
@app = app
end
def call(env)
debugger
@app.call(env)
end
end
当我运行rackup config.ru
并发出请求时,我的env哈希已经非常庞大并且充满了各种与轨道相关的内容,例如#<ActionDispatch::Journey::Path::Pattern:0x007f814c4a9e60
。 #<Rails::Initializable::Initializer:0x007f814d1d0b20
。漂亮打印env需要几秒钟,那里有成千上万的物体。
我已将我的中间件放在堆栈中最高位置。我也尝试使用config.middleware.unshift TestMiddleware
使rake middleware
表示它位于堆栈的顶部,但结果是相同的。在Rails被触及之前,我怎样才能获得请求?在@app.call
之前,rails甚至如何做到这一切? (我已经确认@app
这里是Rails应用程序的一个实例)