架构文件中use
和run
方法之间的区别是什么?似乎run
始终位于config.ru
的末尾,但似乎您应该能够使用use
。非常感谢富有启发性的资源。
答案 0 :(得分:1)
use
适用于中间件
class MyCustomMiddleware
def initialize(app)
@app = app
end
def call(env)
if condition
env['set-header'] = 'Middleware Can modify the response & pass it into next middleware'
end
@app.call(env)
end
run
接受一个响应call的参数,并返回一个最终的Rack响应,其响应代码为200.
class MyApp
def self.call(env)
[200, { "Content-Type" => "text/html" }, ["OK"]]
end
end
了解use
&之间的区别run
。让我们看看典型的机架应用程序的结构。
典型的Rack App
Rack应用程序包括多个中间件,这些中间件响应call
但不返回最终机架响应&响应call
的对象返回最终机架响应,其中包括HTTP响应代码(200,404,500等)。所以通常会有多个对象充当中间件和然后是一个返回带响应代码的最终机架响应的对象。
use
&之间的差异run
强>
现在有了这个,
似乎我们可以多次调用use
,每个中间件和一次调用一次run
只在一个Rack App中出现一次。因此use
只会调用中间件,而run
将运行机架对象,该对象将返回带有HTTP状态代码的最终机架响应。
示例config.ru
use MyCustomMiddleware
use MyCustomMiddleware2
use MyCustomMiddleware3
run MyApp
如果有任何错误,请告诉我。所以我可以纠正它。