写点什么

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:511391
用户头像

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

关注

评论

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

Last Week in Milvus

Zilliz

非结构化数据 Milvus Zilliz AIGC 向量数据库

即时通讯技术文集(第25期):实时音视频基础入门 [共20篇]

JackJiang

网络编程 即时通讯 IM

好用的建模仿真软件 Comsol Multiphysics激活中文

胖墩儿不胖y

Mac软件 仿真软件 仿真工具

亚马逊云科技联合Clarity AI共同推动大规模可持续性投资

财见

3d模型的中心原点有偏移怎么办?

3D建模设计

3d建模 模型原点设置

JavaScript中的异步处理方法,

互联网工科生

JavaScript 异步处理

香港VPS配置与应用:专家级建议与实践指南

一只扑棱蛾子

香港VPS

次世代建模纹理贴图怎么做?

3D建模设计

3D渲染 材质贴图 模型纹理

Java 实现 MySQL 数据锁定策略

秃头小帅oi

软件工程师必备的10个Git命令(先码住)

伤感汤姆布利柏

git GitHub

创意性LED电子大屏幕推动LED显示屏行业融合

Dylan

功能 显示器 LED显示屏 全彩LED显示屏 led显示屏厂家

亚马逊云科技宣布推出Amazon Q重塑未来工作方式

财见

为什么说前端代码的复用率低?

代码生成器研究

谷歌推广怎么做?

九凌网络

Footprint 的批量下载方案使交易回测更轻松

Footprint Analytics

区块链 回测

「智造」第10期:浅谈工业互联网加速企业服务化转型

用友BIP

智能制造

DAPP合约区块链技术项目系统开发

l8l259l3365

uniapp上架app store详细攻略

开源大模型驱动的编程能力测试

百度开发者中心

#人工智能 LLM

低代码开发可以解决哪些问题?

代码生成器研究

3D场景建模工具

3D建模设计

在线工具 3D场景建模 数字孪生场景

如何使用1688店铺所有商品API接口

Noah

LLM模型参数助力多模态大模型高效训练

百度开发者中心

大模型 #人工智能 LLM

基于神经网络的大模型在自然语言处理中的应用前景展望

百度开发者中心

nlp 大模型 #人工智能

通过1688店铺所有商品API接口一键获取店铺所有商品信息

Noah

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