如何在Rails之前添加真正出现的中间件?

时间:2016-04-09 15:54:26

标签: ruby-on-rails ruby rack

给定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应用程序的一个实例)

0 个答案:

没有答案