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

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 在Rails应用程序中构建2个中间件堆栈前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Rails应用程序提供网站和API.
我不希望API的中间件堆栈中出现一些元素,例如:ActionDispatch :: Cookies,ActionDispatch :: Session :: CookieStore或ActionDispatch :: Flash.
网站的中间件堆栈保持正常.

那我该怎么办呢?谢谢.

解决方法

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

application.rb中:

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

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

  1. require_relative "website/engine"
  2.  
  3. module Website; end

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

  1. module Website
  2. class Engine < ::Rails::Engine
  3. middleware.use ActionDispatch::Cookies
  4. middleware.use ActionDispatch::Session::CookieStore
  5. middleware.use ActionDispatch::Flash
  6. end
  7. end

配置/ routes.rb文件

  1. mount Website::Engine => "/website"

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

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

  1. lib
  2. engines
  3. website
  4. app
  5. assets
  6. ...
  7. controllers
  8. ...
  9. views
  10. ...
  11. config
  12. routes.rb
  13. lib
  14. website
  15. website.rb

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

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

猜你在找的Ruby相关文章