写点什么

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

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

关注

评论

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

Android C++系列:Linux网络(四)TCP详解

轻口味

c++ android 28天写作 12月日更

Flexagile 弹性敏捷 - 实践篇

RingCentral铃盛

架构实战 - 模块六

唐敏

「架构实战营」

Deutsch-Jozsa Algorithm

Si Yuan

量子计算

Go+ HTTP 客户端教程(5.1)

liuzhen007

28天写作 12月日更

在线JSON转Go Bson工具

入门小站

工具

将挖洞当作爱好和职业的笑与泪:微软漏洞研究员的自白

网络安全学海

网络安全 信息安全 漏洞扫描 漏洞分析 漏洞挖掘

Prometheus Exporter (二十三)Slurm Exporter

耳东@Erdong

Prometheus 28天写作 exporter 12月日更 Slurm

Musical.ly 创始人:演化成就伟大的产品

石云升

28天写作 产品创新 12月日更 产品演化

Apache Log4j2远程代码执行漏洞攻击,华为云安全支持检测拦截

华为云开发者联盟

安全 华为云 漏洞 Apache Log4j2

WebP,淘宝都在用的图片优化方法

CRMEB

通过接口百度网盘下载文件

为自己带盐

28天写作 百度网盘 12月日更

2021,自动驾驶的“五代十国”

脑极体

Quantum Mechanics Is Different

Si Yuan

量子计算

Gbase8a MPP Cluster 集群管理

南渡北归

gbase8a gbase8a集群管理 gcadmin

CSS之选择器(三)

Augus

CSS 12月日更

当诗人遇到熟读2600亿中文参数的大模型

脑极体

如何对数组中的对象进行排序

Changing Lin

12月日更

Flexagile 弹性敏捷 - 理论篇

RingCentral铃盛

Flexagile

实用机器学习笔记十:机器学习模型

打工人!

AI 算法 学习笔记 机器学习算法 12月日更

图解 Volatile 原理三

悟空聊架构

volatile 28天写作 悟空聊架构 12月日更 嗅探

回家

Tiger

28天写作

技术架构的战略和战术原则

xcbeyond

28天写作 12月日更

Linux之cd命令

入门小站

目录

误删服务器/tmp下的文件之后引发的问题

熊斌

解决方案

给代码上一份保险

Rayjun

git pre-commit

我们需要一个React框架吗?

RingCentral铃盛

React 框架 分布式应用框架

HHL Algorithm

Si Yuan

量子计算

Flexagile 弹性敏捷 - 文化篇

RingCentral铃盛

在 Dart(以及 Flutter)中生成随机字符串的 3 种不同方法【Flutter专题21】

坚果

flutter 28天写作 12月日更

41 K8S之网络策略

穿过生命散发芬芳

k8s 28天写作 12月日更

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