ruby-on-rails – 在Rails应用程序中构建2个中间件堆栈

我有一个Rails应用程序提供网站和API.
我不希望API的中间件堆栈中出现一些元素,例如:Actiondispatch :: Cookies,Actiondispatch :: Session :: CookieStore或Actiondispatch :: 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"

(或者你可以安装在“/”,但是define your other routes first in that case)

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

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

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

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...