红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

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

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

关注

评论

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

人工智能 | 革命性的物流与运输

测吧(北京)科技有限公司

测试

Lightroom Classic for mac(Lrc2021) 10.3激活版

mac

LRC2022 照片编辑软件 苹果mac Windows软件 Lightroom Classic 2022

议题征集|Flink Forward Asia 2023 正式启动

Apache Flink

大数据 flink 实时计算

如何让 Llama2、通义千问开源大语言模型快速跑在函数计算上?

阿里巴巴云原生

阿里云 云原生

ERP再解读:端点科技新一代ERP如何拓展传统ERP的边界

科技热闻

人工智能 | AI驾驶系统的安全性

测吧(北京)科技有限公司

测试

人工智能 | 自动驾驶与卫星导航

测吧(北京)科技有限公司

测试

ABAQUS常用功能总结,推荐给自学的朋友们!

思茂信息

abaqus abaqus软件 abaqus有限元仿真

香港服务器购买指南:如何挑选最适合你的网络解决方案?

一只扑棱蛾子

香港服务器

软件测试/测试开发丨Python深拷贝与浅拷贝 学习笔记

测试人

Python 软件测试 测试开发 深拷贝与浅拷贝

微信审核趋严,小程序引流需要配一个小程序化App

Speedoooo

超级app 小程序化App superapp App小程序化

人工智能 | 自动驾驶汽车的未来:道路安全与出行革命

测吧(北京)科技有限公司

测试

华为云CodeArts Check代码检查插件(CodeArts IDE本地版本)使用指南

华为云PaaS服务小智

云计算 软件开发 华为云 代码检查

2024广州国际预制菜包装与设备展览会

吹吹晚风

2024上海国际新能源汽车空调及散热设备展览会

吹吹晚风

人工智能 | 自动驾驶与城市规划

测吧(北京)科技有限公司

测试

城市交通的未来服务:迎接便捷、可持续和智能的交通体验

测吧(北京)科技有限公司

测试

如何管理公厕电器化设备从而实现节能减排

光明源智慧厕所

智慧厕所 智慧公厕

2024上海国际汽车安全产品与技术装备展览会

吹吹晚风

2024上海国际新能源汽车动力驱动系统展览会

吹吹晚风

2024中国(上海)国际汽车用钢技术展览会

吹吹晚风

人工智能 | 自动驾驶与环境保护

测吧(北京)科技有限公司

测试

腾讯云大数据ES:一文秒懂!使用Elasticsearch进行数据分析

腾讯云大数据

elasticsearch

2024上海国际汽车噪声振动控制技术展览会

吹吹晚风

05. 机器学习入门1 - 动态规划

茶桁

人工智能 动态规划

住宅socks代理对于爬虫来说有什么帮助?

巨量HTTP

socks5代理

软件测试/测试开发丨Python文件操作 学习笔记

测试人

Python 程序员 软件测试 测试开发 文件操作

九章云极DataCanvas公司获评中国信通院两大AI标准核心参编单位

九章云极DataCanvas

TDengine+OpenVINO+AIxBoard,助力时序数据分类

TDengine

时序数据库 ​TDengine

Mybatis in Springboot

Kevin_913

Java mybatis

华为云CodeArts Check代码检查插件(Cloud IDE版本)使用指南

华为云PaaS服务小智

云计算 软件开发 华为云 代码检查

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