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

Cen*_*noc 7 ruby rack

机架文件中的方法userun方法有什么区别?它似乎run总是在最后config.ru,但似乎你应该只能使用use.也非常赞赏有启发性的资源.

Cur*_*ind 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 Code Online (Sandbox Code Playgroud)

run接受一个响应调用的参数,并返回带有 HTTP 响应代码(如 200)的最终 Rack 响应。

class MyApp
  def self.call(env)
   [200, { "Content-Type" => "text/html" }, ["OK"]]
 end
end
Run Code Online (Sandbox Code Playgroud)

了解use &之间的区别run。让我们看看典型的机架应用程序的结构。

典型的 Rack 应用 程序 Rack 应用程序包括多个响应call但不返回最终机架响应的中间件和一个响应的对象,该对象call返回最终机架响应,其中包括 HTTP 响应代码(200,404,500 等)。因此,通常会有多个对象充当中间件,然后有一个对象返回带有响应代码的最终机架响应。

use&之间的区别run

现在有了这个,我们似乎可以use多次调用,每个中间件调用一次,而run在单个 Rack 应用程序中只能调用一次。souse只会调用中间件,而run会运行rack 对象,该对象将返回带有HTTP 状态代码的最终rack 响应。

例子config.ru

use MyCustomMiddleware
use MyCustomMiddleware2
use MyCustomMiddleware3
run MyApp
Run Code Online (Sandbox Code Playgroud)

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