我正在阅读有关Rack Middleware的this文章。它陈述如下:
Rack不仅仅是可用于与Web服务器通信的接口。 它用于分组和订购模块,通常是Ruby类, 并指定它们之间的依赖关系 Rack :: Builder放置这些模块 在彼此之上,创建最终网络的堆栈式结构 应用
基本上,我们可以使用ruby类将中间件堆叠在一起。我们只需要参考下一个中间件 - 有点让我想起装饰设计模式。
我们需要做的就是有一个构造函数,它将下一个应用程序(堆栈中的中间件)作为paraemter。其次,我们需要定义一个调用方法,它将环境哈希作为参数,并返回状态代码,环境哈希和响应体的数组。
这是提供的示例:
o
根据Rack文档,use方法将中间件添加到堆栈,run方法调度到应用程序。我对这种语法感到有些困惑。使用将虾添加到中间件堆栈并运行Lobster实例进入Shrimp构造函数?我仍然对此处的角色感到困惑。
答案 0 :(得分:1)
您链接的文章提到Rack
附带示例应用Lobster
所以是的,首先,这是一个应用。
Shrimp
类只是一个Ruby类,它应该是一个中间件的编写方式。
在config.ru
文件中,您需要模块,注册中间件,然后运行应用程序。
使用将虾添加到中间件堆栈并运行通过龙虾 实例进入Shrimp构造函数?
当您说use
向中间件堆栈添加Shrimp
但run
未必将Lobster
实例传递到Shrimp
构造函数时,您就是对的。 run
只执行Rack
应用程序并传递app
实例是Rack
内部工作的方式。真实的事情发生在注册中间件的use
部分。
例如:
# config.ru
require 'rack'
require 'rack/lobster'
require 'shrimp_1'
require 'shrimp_2'
require 'shrimp_3'
use Shrimp_1
use Shrimp_2
use Shrimp_3
run Rack::Lobster.new </pre>
所有三个Shrimp
类将按此顺序传递app(Lobster)
个实例,这将由Rack
本身处理。
答案 1 :(得分:0)