写点什么

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

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

关注

评论

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

DevOps |如何说清楚研发效能工作的价值?

laofo

DevOps cicd 研发效能 持续交付 研发效能度量

pulsar:创建更多租户 VS 创建更多namespaces

李code

架构 pulsar 调优 业务

一文读懂mysql锁

Paincupid

MySQL MySQL锁 mysql锁原理 mysql如何上锁 msyql锁分类

使用 DataEase 展示服务器运行状态

搞大屏的小北

Linux监控 Linux监控脚本 监控展示 监控大屏

五分钟!获得轻量级的云原生应用控制平面

阿里巴巴云原生

阿里云 开源 云原生 KubeVela

Sync包Mutex的原理阐述

Jack

golang

AF_XDP技术简介

天翼云开发者社区

AI的道德风险验证

陈磊@Criss

「行业化」会是ToB巨头们的新战场吗?

ToB行业头条

直播回顾 | 点击率提升400%,Ta是怎么做到的?

HarmonyOS SDK

HMS Core

一文讲透|如何部署OceanBase社区版(4.x版)

OceanBase 数据库

数据库 oceanbase

碳基大模型--人一生处理多少个token?

FN0

人工智能 AIGC ChatGPT

从人工智能角度看人肉智能

FN0

AIGC

个人开发者应该如何选购云服务

光毅

RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践

阿里巴巴云原生

阿里云 RocketMQ 云原生

设计原则 — I 接口隔离原则

Lemoon Can

接口隔离原则 设计原则

如何使用 MegEngine 生态落地一个算法

MegEngineBot

开源 性能优化 MegEngine 算法落地

矩阵起源荣获“IT用户满意度大会”年度新秀称号

MatrixOrigin

MatrixOrigin MatrixOne

探索Python Web后端技术的发展之路

阿呆

深入探讨Python Tornado框架:原理与异步实现

阿呆

Python tornado Web

Activity初窥门径

芯动大师

android App Activity

轻松搞懂云成本优化:FinOps,2023年一定要懂的热点趋势!

博文视点Broadview

私有化部署chatGPT,告别网络困扰

南城FE

人工智能 前端 ChatGPT

腾讯云数据库性能打破世界纪录 每分钟可处理8.14亿笔交易

数据库小组

数据库 腾讯云 tdsql

澜舟科技周明:进入AI 2.0不代表一定要抛弃1.0的技术

澜舟孟子开源社区

AIGC 澜舟科技 ChatGPT

AI又火了,这一次云厂商能赚到钱吗?

脑极体

云计算 AI 云厂商

职场「OKR」,魔幻又内卷

Java 架构 职场 OKR

秒懂算法 | Treap树

TiAmo

数据结构 算法 节点 旋转法

一文读懂HAG:首个永久锚定BTC Mining算力的Security Token

股市老人

从制作九转大肠来谈起 | GreptimeDB 如何提高多步操作的容错能力

Greptime 格睿科技

数据库 云原生 时序数据库 procedure

HPC调度基础:slurm集群的部署

天翼云开发者社区

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