Ruby 中如何使用 Rack?

· 约 3 分钟读完 · 第 188 / 199 章

推荐答案

本题详细解读

Rack 是什么?

Rack 是 Ruby 中的一个 Web 服务器接口,它提供了一个标准化的接口,使得 Ruby Web 框架(如 Rails、Sinatra 等)能够与各种 Web 服务器(如 WEBrick、Unicorn、Puma 等)进行交互。Rack 的核心思想是提供一个简单的中间件架构,允许开发者通过组合不同的中间件来构建复杂的 Web 应用。

Rack 应用的基本结构

一个最简单的 Rack 应用是一个响应 call 方法的对象(通常是 Proc 或 lambda),它接受一个环境变量 env 作为参数,并返回一个包含三个元素的数组:

  1. HTTP 状态码(如 '200')
  2. 响应头(如 {'Content-Type' => 'text/html'})
  3. 响应体(如 ['Hello, Rack!'])

示例代码解析

  • app = Proc.new do |env| ... end:定义一个 Rack 应用,它是一个 Proc 对象,接受 env 参数并返回一个包含状态码、响应头和响应体的数组。
  • Rack::Handler::WEBrick.run app, Port: 9292:使用 Rack::Handler::WEBrick 启动应用,监听 9292 端口。

运行示例

  1. 将上述代码保存为 config.ru 文件。
  2. 在终端中运行 rackup 命令启动应用。
  3. 打开浏览器访问 http://localhost:9292,你将看到页面显示 "Hello, Rack!"。

扩展应用

你可以通过添加中间件来扩展 Rack 应用的功能。例如,使用 Rack::Builder 来组合多个中间件:

在这个例子中,Rack::CommonLogger 和 Rack::ShowExceptions 是两个常用的中间件,分别用于记录请求日志和显示异常信息。