Ruby Rack 入门
Rack 定义了 Ruby Web 应用和 Web Server 之间的接口。很多 Ruby Web 框架都建立在 Rack 之上。
最小 Rack 应用
创建 config.ru:
config.ru
run ->(env) {
[
200,
{ "content-type" => "text/plain" },
["Hello Rack\n"]
]
}
运行:
rackup
然后访问:
http://localhost:9292
Rack 应用返回什么
Rack 应用返回一个三元素数组:
[
status,
headers,
body
]
含义:
status:HTTP 状态码,例如200。headers:响应头 Hash。body:响应体,通常是一个能逐个产出字符串的对象。
env 是什么
env 是一个 Hash,包含请求信息:
config.ru
run ->(env) {
path = env["PATH_INFO"]
[
200,
{ "content-type" => "text/plain" },
["path=#{path}\n"]
]
}
访问不同路径,会看到不同 PATH_INFO。
Rack 的意义
Rack 让 Web Server 和 Ruby Web 应用之间有了统一接口。框架可以专注于路由、参数、控制器等更高层能力。
小结
你不需要每天手写 Rack,但理解 Rack 能帮你看懂 Ruby Web 框架底层:请求变成 env,应用返回 [status, headers, body]。