Ruby 使用和磨合机架之间的差异
货架文件中的Ruby 使用和磨合机架之间的差异,ruby,rack,Ruby,Rack,货架文件中的use和run方法有什么区别?似乎run始终位于config.ru的末尾,但似乎您应该能够使用use。非常感谢您提供启发性的资源。使用是用于中间件的 class MyCustomMiddleware def initialize(app) @app = app end def call(env) if condition env['set-header'] = 'Middleware Can modify the response &
use
和run
方法有什么区别?似乎run
始终位于config.ru
的末尾,但似乎您应该能够使用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
接受一个参数,该参数响应调用并返回最终的机架响应,HTTP响应代码为200
class MyApp
def self.call(env)
[200, { "Content-Type" => "text/html" }, ["OK"]]
end
end
要了解之间的区别,请使用和运行。让我们看看典型的rack应用程序的结构
典型机架应用程序
机架应用程序包括多个中间件,它们响应调用
,但不返回最终机架响应&一个响应调用
的对象,该调用返回最终机架响应,其中包括HTTP响应代码(200404、500等)。因此,通常会有多个对象充当中间件&然后一个对象返回带有响应代码的最终机架响应
使用和运行之间的区别
现在有了这个,,
似乎我们可以多次调用use
,每个中间件调用一次&在单个机架应用程序中只运行一次。因此use
将只调用中间件,而run
将运行机架对象,该对象将返回带有HTTP状态代码的最终机架响应
示例config.ru
use MyCustomMiddleware
use MyCustomMiddleware2
use MyCustomMiddleware3
run MyApp
如果上面有任何错误,请告诉我。所以我可以纠正它 是否可能由于(比如)身份验证错误而停止中间件管道的某个位置?^^^^^是的。事实上,沃登也使用了类似的身份验证方法——一种所有流行的宝石(如Desive)都使用的基于机架的身份验证。你可以看到它的形状。其核心是#call方法只是检查一个条件&做一些事情。和我上面的例子一样。