Rails 5:在routes.rb中安装的机架应用程序绕过Rails中间件?

时间:2016-10-29 22:19:21

标签: ruby-on-rails sinatra rack

我在我的routes.rb中安装了几个Rack应用程序,如下所示:

mount ImageVise, at: '/ivise'
mount ShaderApiV0, at: '/api/v0'

我目前正从意大利面条自定义Rack堆栈迁移到Rails,因此保留这些应用程序对我来说很有意义。我注意到,当我调用控制器时,在应用程序上定义的整个Rails中间件堆栈(包括我的Rack :: Cache设置)确实起作用,但当我调用由这些控制的URL时,不会起作用小应用程序。我几乎可以肯定它在Rails 4中运行了。

例如,如果我引入这样的自定义中间件:

class Mittel < Struct.new(:app)
  def call(env)
    a, b, c = app.call(env)
    b['X-Kustom'] = 'olala'
    [a,b,c]
  end
end
config.middleware.insert_before Rack::Head, Mittel

当我请求由Rails控制器驱动的URL时,我确实看到了X-Kustom响应标头,但当我请求由其控制的其中一个URL时,得到它安装迷你应用程序。因此,条件GET和类似的东西不起作用等。除了复制config.rb中的三分之一Rails中间件堆栈并将这些应用程序安装在那里之外,我怎样才能使它工作?

1 个答案:

答案 0 :(得分:1)

找到它。事实证明我在config.ru中也在同一个URL下安装了其中一个应用程序 - 然后当然整个Rails堆栈被绕过,应该是这样。经验教训。