推荐答案
# 最简单的 Rack 应用示例
app = Proc.new do |env|
['200', {'Content-Type' => 'text/html'}, ['Hello, Rack!']]
end
# 使用 Rack::Handler 启动应用
Rack::Handler::WEBrick.run app, Port: 9292本题详细解读
Rack 是什么?
Rack 是 Ruby 中的一个 Web 服务器接口,它提供了一个标准化的接口,使得 Ruby Web 框架(如 Rails、Sinatra 等)能够与各种 Web 服务器(如 WEBrick、Unicorn、Puma 等)进行交互。Rack 的核心思想是提供一个简单的中间件架构,允许开发者通过组合不同的中间件来构建复杂的 Web 应用。
Rack 应用的基本结构
一个最简单的 Rack 应用是一个响应 call 方法的对象(通常是 Proc 或 lambda),它接受一个环境变量 env 作为参数,并返回一个包含三个元素的数组:
- HTTP 状态码(如
'200') - 响应头(如
{'Content-Type' => 'text/html'}) - 响应体(如
['Hello, Rack!'])
示例代码解析
app = Proc.new do |env| ... end:定义一个 Rack 应用,它是一个Proc对象,接受env参数并返回一个包含状态码、响应头和响应体的数组。Rack::Handler::WEBrick.run app, Port: 9292:使用Rack::Handler::WEBrick启动应用,监听 9292 端口。
运行示例
- 将上述代码保存为
config.ru文件。 - 在终端中运行
rackup命令启动应用。 - 打开浏览器访问
http://localhost:9292,你将看到页面显示 "Hello, Rack!"。
扩展应用
你可以通过添加中间件来扩展 Rack 应用的功能。例如,使用 Rack::Builder 来组合多个中间件:
app = Rack::Builder.new do
use Rack::CommonLogger
use Rack::ShowExceptions
run Proc.new { |env| ['200', {'Content-Type' => 'text/html'}, ['Hello, Rack!']] }
end
Rack::Handler::WEBrick.run app, Port: 9292在这个例子中,Rack::CommonLogger 和 Rack::ShowExceptions 是两个常用的中间件,分别用于记录请求日志和显示异常信息。