写点什么

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

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

关注

评论

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

Java 并发编程总结

Joseph295

Ampere Computing释放观测云“芯”算力,强强联合推动可观测性发展

观测云

可观测性 可观测

基于 TiDB 的 Apache APISIX 高可用配置中心的最佳实践

API7.ai 技术团队

微服务网关 api 网关 APISIX TiDB

外包学生管理系统详细架构设计文档

高山觅流水

「架构实战营」

活动预告 | 4月23日,多场OpenMLDB精彩分享来袭,不负周末好时光!

第四范式开发者社区

机器学习 数据库 AI 特征 特征平台

spring-cloud-kubernetes自动同步k8s的configmap更新

程序员欣宸

Java Kubernetes 4月月更

超越 iTerm!号称下一代 Terminal 终端神器,用完爱不释手!

沉默王二

Java类应用高内存问题排查指南

中原银行

Java JVM 问题排查 中原银行 高内存

Docker Compose 部署Kibana和 Elasticsearch本地集群 8.1.3

Geek漫游指南

elasticsearch

模块三:外包学生管理系统-架构设计文档

jiaoxn

「架构实战营」

如何构建一个可“持续演进”的可观测体系?| QCon

阿里巴巴云原生

【建议收藏】吐血整理Golang面试干货21问-吊打面试官-1

利志分享

golang golang 面试

架构实战营-模块三-作业

michael

架构实战营 #架构实战营 「架构实战营」

嵌入式Linux下完成LCD屏文字显示(帧缓冲框架)

DS小龙哥

4月月更

一起学习Python的Sanic框架:路由和蓝图

宇宙之一粟

Python 4月月更 sanic

在互联网+的背景下,企业如何创新客户服务?

小炮

客户服务

java培训redis的集群策略

@零度

redis JAVA开发

观测云入驻阿里云计算巢,为用户构建稳定安全的云上连接

阿里云弹性计算

长沙好人

成周

【课程汇总】Hello HarmonyOS系列课程,手把手带你零基础入门

HarmonyOS开发者

HarmonyOS ArKUI 3.0

从mybatis-plus-generator看如何编写代码生成器

Rubble

4月日更 4月月更

APISIX jwt-auth 插件存在错误响应中泄露信息的风险公告(CVE-2022-29266)

API7.ai 技术团队

api 网关 APISIX CVE

云原生架构下的微服务选型和演进

阿里巴巴云原生

架构实战训练 模块三

小马

「架构实战营」

被滥用的“架构师”!

博文视点Broadview

Robot OS驱动开发

轻口味

c++ android Robot 4月月更 AOSP

vue中使用element-resize-detector

CRMEB

Kafka设计的基本原理

平凡人生

外包学生管理系统架构设计文档

大眼喵

「架构实战营」

模块三作业

天琪实刚亮

云原生微服务的下一站,微服务引擎 MSE 重磅升级

阿里巴巴云原生

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