Ruby on rails Rails 5:routes.rb中安装的Rack应用程序是否绕过Rails中间件?
我的Ruby on rails Rails 5:routes.rb中安装的Rack应用程序是否绕过Rails中间件?,ruby-on-rails,sinatra,rack,Ruby On Rails,Sinatra,Rack,我的routes.rb中安装了一些机架式应用程序,如下所示: mount ImageVise, at: '/ivise' mount ShaderApiV0, at: '/api/v0' 我目前正在从意大利面定制机架堆栈迁移到Rails,因此保留这些应用程序对我来说是有意义的。我注意到,应用程序上定义的整个Rails中间件堆栈(包括我的Rack::Cache设置)在我调用控制器时起作用,但在我调用由这些迷你应用程序控制的URL时不起作用。不过,我几乎可以肯定Rails 4中的操作是有效的 例如
routes.rb中安装了一些机架式应用程序,如下所示:
mount ImageVise, at: '/ivise'
mount ShaderApiV0, at: '/api/v0'
我目前正在从意大利面定制机架堆栈迁移到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
class Mittel
当我请求一个由Rails控制器驱动的URL时,我确实看到了X-Kustom
响应头,但当我请求一个由安装的迷你应用程序控制的URL时,我没有看到它。因此,条件GET和类似的东西不起作用等等。除了在config.rb中复制Rails中间件堆栈的三分之一并将这些应用装载到那里之外,我如何使它起作用?找到了它。原来我也在config.ru
的同一个URL下安装了这些应用程序中的一个,然后整个Rails堆栈被绕过,这是应该的。吸取的教训