在初始化之前交换 RAILS 个中间件

Swap RAILS middleware before initialized

假设这是应用程序完全启动后我的 RAILS 中间件堆栈:

> Rails.application.middleware

#<ActionDispatch::MiddlewareStack:0x007f9d1636e970
 @middlewares=
  [FooMiddleware,
   ...
   ...
   ...
   SomeEngine::SomeMiddleware]>

在初始化过程完成并且中间件堆栈被冻结之前,我需要将 SomeEngine::SomeMiddlewareMyProxyMiddleware 交换。

您如何延迟插入或交换中间件,直到完成所有其他初始化(从应用程序和它包含的引擎)?

我找不到挂钩到中间件堆栈未冻结但所有 SomeEngine 已初始化的位置。

如果重要,请在 RAILS 4.2.

谢谢!

想通了:

# config/application.rb

module MyApplication
  class Application < Rails::Application
    # ...

    initializer :foo do |app|
      app.middleware.swap SomeEngine::SomeMiddleware, BarMiddleware
    end
  end
end

希望这对其他人有帮助。干杯。