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

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 在Rails应用程序中构建2个中间件堆栈前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@
我有一个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.

原文链接:https://www.f2er.com/ruby/271282.html

猜你在找的Ruby相关文章