写点什么

Rack:处理 HTTP 请求更简单

  • 2008-04-15
  • 本文字数:1010 字

    阅读完需:约 3 分钟

Rack 提供了 Web 服务器和 Ruby 开发框架之间的接口。它将框架编写者从为每个 Web 服务器单独编写一个处理模块的繁重负担中解脱出来,可以节省大量重复劳动。

Rack 相当易用,如下示例便可以让你创建一个运行于 Mongrel 上的极简应用处理器:

<pre id="a7yh">require 'rack'<br id="twiq"></br>app = lambda { |env| [200, {"Content-Type" => "text/plain"}, ['Hello World!']] }<br id="qsr7"></br>Rack::Handler::Mongrel.run(app, :Port => 3000)参数 env 包括一个环境变量和请求参数的散列。代码块的返回值由带有三个元素的数组组成:HTTP 状态码、响应头和响应体。

Rack 的创始人 Christian Neukirchen 为 InfoQ 分享了一些 Rack 的历史:

起初,我对 Ruby 的 Web 开发框架的状态感觉不太舒服,于是有了自己写的打算。正当这时, web.py 发布了,我很喜欢它那么精致而又易于维护。所以我开始编写自己的框架,但是没有成功,因为我写了很多计划外的东西,例如 Cookie 解析等等。实际上我从其他的项目中拷贝了一些代码过来,但是要做的工作依然令人厌烦。于是这个框架作废了。后来,我了解到了 Python 的 Nevow ,并试图去模仿它开发一些东西。但是就在我刚开始开发的时候,我发现我正在为不同的服务器重写辅助方法(helper)和适配器(adapter)。在深入的了解 Python 框架之时,我偶然发现了 WSGI ,我阅读它、喜欢它、简化它,并最终完成了 Rack 的原形。我重新组织了已写代码,并基于 Python Paste 的结构模块化,很快 Rack 0.1 就已经完成了。

当 Rack 可用之时,我依然没有喜欢的框架,所以我开发了 Coset ,这也是我最近一直在用的框架。它的设计灵感来自于 Camping web.py RESTlet

已经有相当多的框架提供了对 Rack 的支持

* Camping (包含在 Rack 发行版中)
\* Coset
\* Halcyon
\* Maveric
\* Merb
\* Mack
\* Racktools::SimpleApplication
\* Ramaze
\* Rails (第三方,与 thin 协同交付)
\* Sinatra
\* Vintage

Rack 可以和框架协同使用。例如,如果想简便而快速的处理一个确定的请求,Rack 的 Rack::Cascade 可以将几个应用级联起来。这篇 Ezra Zygmuntowicz 的博客讲解了如何通过 Rack 实现文件上传,而不需要访问整个 merb 栈。

接下来,Christian 计划稳定其规范,为 1.0 发布版做准备。

要了解更多 Rack 的信息,请访问 Rack 的官方网站。希望了解更深入的信息的话,这里还有一篇关于 Rack 的内部工作机制的 Euruko 07 论文

查看英文原文: Rack: HTTP request handling made easy

2008-04-15 21:511614
用户头像

发布了 80 篇内容, 共 23.6 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

VuePress 博客优化之增加 Vssue 评论功能

冴羽

JavaScript Vue 前端 vuepress vssues

投稿开奖丨轻量应用服务器征文活动(2月)奖励公布

阿里云弹性计算

轻量征文

TGIP-CN 036 报名|预见 2022 · Apache Pulsar 技术进展与社区动态

Apache Pulsar

开源 架构 云原生 Apache Pulsar 社区

区块链发展趋势与思考

CECBC

架构实战营 4 期第九模块作业

jialuooooo

架构实战营

架构实战营模块九作业

zhongwy

架构实战营第 4 期 -- 模块九作业

烈火干柴烛灭田边残月

架构实战营

什么是广域网WAN?学WAN,看这篇文章就够了!

Ethereal

黄金VS比特币:谁更有吸引力?

CECBC

昆仑分布式数据库独特的变量读写功能介绍

KunlunBase昆仑数据库

数据库 读写分离

业内首家!百度智能云智慧金融业务通过ISO37301合规管理体系认证

百度开发者中心

阿里巴巴在开源压测工具 JMeter 上的实践和优化

阿里巴巴云原生

Apache 阿里云 云原生 Jmeter

Flutter 设置应用主题色和字体

岛上码农

flutter ios 安卓 移动端 3月月更

DSTC10 赛道最佳论文揭晓!文心 PLATO 再获殊荣

百度开发者中心

干货分享 | 推荐两款好用的企业文档管理软件

小炮

Linux这5大磁盘分区工具,绝了!

Ethereal

吉利控股集团与百度深化战略合作

百度开发者中心

见证中国云势力崛起!博睿数据实力入围2021~2022 Cloud 100 榜单

博睿数据

培训第二弹!全国大学生智能汽车竞赛百度竞速组预告

百度开发者中心

2022年2月云主机性能评测报告

博睿数据

如何限制Linux终端中tree命令递归文件列表的深度?

Ethereal

社区知识库|常见问答 FAQ 集合第 5 期:Broker、Topic、Pulsar 客户端及消息限制等相关问题

Apache Pulsar

开源 架构 云原生 Apache Pulsar 社区

干货|性能提升密钥,由代码细节带来的极致体验

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

建设领先的AI原生云,百度智能云落地新一代高性能AI计算集群

百度开发者中心

什么是单臂路由器?如何配置单臂路由?

Ethereal

视频质量评价VMAF,为何让人又喜又忧?

微帧Visionular

视频编码

一文了解路由平台的 Cisco IOS 和 IOS XE 命名约定,看这篇就够了!

Ethereal

Hadoop HDFS 3.3.1分布式存储搭建

KunlunBase昆仑数据库

国产数据库

开发者们看过来~填问卷参与抽奖,双重周边奖励仅限本周!

InfoQ写作社区官方

OpenHarmony 热门活动

如何基于制品元数据提升交付效率 | 阿里巴巴DevOps实践指南

阿里云云效

云计算 阿里云 云原生 软件开发 持续交付

Gartner发布服务器虚拟化市场指南 灵雀云作为唯一本土容器厂商入选

York

容器 云原生 数据中心

Rack:处理HTTP请求更简单_Ruby_Mirko Stocker_InfoQ精选文章