在Rails应用程序中构建2个中间件堆栈

我有一个Rails应用程序提供网站和API。
我不希望API的中间件堆栈中出现一些元素,例如: ActionDispatch::CookiesActionDispatch::Session::CookieStoreActionDispatch::Flash
网站的中间件堆栈保持正常。

那我该怎么办呢? 谢谢。

我有完全相同的情况,并希望做同样的事情。 到目前为止,我已经能够使用Rails引擎添加缺少的中间件而没有问题的某些路由(虽然它不一定在堆栈中的“正确顺序”,但到目前为止似乎工作正常):

application.rb中:

 # after Bundler.require(...) require_relative '../lib/engines/website/lib/website' 

LIB /发动机/网站/ lib中/ website.rb:

 require_relative "website/engine" module Website; end 

LIB /发动机/网站/ lib目录/网站/ engine.rb:

 module Website class Engine < ::Rails::Engine middleware.use ActionDispatch::Cookies middleware.use ActionDispatch::Session::CookieStore middleware.use ActionDispatch::Flash end end 

配置/ routes.rb文件:

 mount Website::Engine => "/website" 

(或者你可以挂载“/”,但在那种情况下首先定义你的其他路线 )

该网站的所有内容都在引擎目录下的典型目录结构中:

 lib engines website app assets ... controllers ... views ... config routes.rb lib website website.rb 

我还没有走得太远,但到目前为止,这对我有用。

注意:从技术上讲,引擎文件甚至不必是网站目录中的单独文件。 您可以将它推入website.rb并使其成为一个文件 - 如果没有其他任何特别复杂的东西添加到您的lib目录。 我发现的唯一要求是文件必须位于引擎自己的命名目录中的lib目录中(理论上包含config/routes.rb和引擎的其余文件结构),因为当Rails :: Engine时由应用程序急切加载,引擎查找其lib目录以查找相邻的应用程序,配置,供应商等以急切加载。