在Rack中使用和运行之间的区别

时间:2013-12-22 04:11:54

标签: ruby rack

架构文件中userun方法之间的区别是什么?似乎run始终位于config.ru的末尾,但似乎您应该能够使用use。非常感谢富有启发性的资源。

1 个答案:

答案 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

如果有任何错误,请告诉我。所以我可以纠正它。