把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

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

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

关注

评论

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

中小企业如何有效应对计算资源的弹性变化需求?

阿里巴巴中间件

阿里云 Serverless 云原生 中小企业

高效工作,文档协作必不可少

Baklib

高效工作 文档协作

24小时的客户服务如何实现?来建立产品知识库吧!

Baklib

产品 知识库 客户服务

【DBA100人】胡中豪:国产分布式数据库DBA炼成记

OceanBase 数据库

【JavaWeb】Servlet系列——模板方法设计模式、HttpServlet源码分析、Web站点的欢迎页面、关于WEB-INF目录

胖虎不秃头

Web java; 9月月更

SpringBoot源码 | printBanner方法解析

六月的雨在InfoQ

源码 springboot 9月月更 springboot源码

Java 在Word文档中添加艺术字

在下毛毛雨

Java word 添加艺术字

利用京东云Web应用防火墙实现Web入侵防护

京东科技开发者

网络安全 安全 防火墙 WEB安全 京东云

OpenSSF发布npm 最佳实践指南,应对开源依赖风险

SEAL安全

npm DevSecOps 开源安全 软件供应链安全 开源安全与治理

Java注解详细

石臻臻的杂货铺

Java 阅读 9月月更

开发者必读:2022年移动应用技术趋势白皮书

HarmonyOS SDK

jdbcs之连接池和框架

楠羽

JDBC 笔记 9月月更

Spring源码解析(十二)Spring扩展接口SmartInstantiationAwareBeanPostProcessor解析

石臻臻的杂货铺

spring 9月月更

数据如何指导决策:优酷主客APP播转率的C端优化

阿里巴巴文娱技术

数据分析 数据 BI

云对象 - 重新定义前后端交互

崔红保

uni-app Serverless unicloud

Sovit3D数字孪生智慧港口三维可视化解决方案

数据可视化平台

物联网 智慧港口 5G智慧港口 港口三维可视化 智慧港口解决方案

如何理解「数字化是 IT 公司在给传统企业贩卖焦虑」?

BizFree

数字化转型 企业 焦虑 智能制造

不清楚产品帮助中心怎么设置?从这几点出发!

Baklib

产品 帮助中心

【JavaWeb】Servlet系列——响应HTML代码、Servlet连接数据库、IDEA开发Servlet程序、Servlet对象的生命周期、Generic

胖虎不秃头

Web java; 9月月更

CLIP-as-service 升级啦!

Jina AI

开源 算法 神经搜索

2个原则,8个小撇步,带你探究 Dockerfile 在工程实践中的实战技巧!

Jina AI

Dockfile

【JavaWeb】Servlet系列——请求和响应过程的角色和协议、模拟Servlet本质、开发第一个带有Servlet的Webapp、关于Java EE的版本

胖虎不秃头

Web java; 9月月更

启科量子公布量子计算机工程化进展

启科量子开发者官方号

Maven的下载安装配置以及IDAEA中Maven的配置

守夜人st

9月月更

我们的月饼不一样!来线上 DIY 微软限定款

Azure云科技

技术 活动报名

FlyFish开发者说|开源低代码平台的体验与思考

云智慧AIOps社区

前端 低代码 开源项目 数据可视化 可视化大屏

一文详解东数西算下绿色数据中心节能减排十大技术、智算中心八大趋势

GPU算力

ShareSDK Android端分享与授权示例代码

MobTech袤博科技

android sdk

数字藏品电商平台开发:如何开发数字藏品?

开源直播系统源码

区块链 NFT 数字藏品 数字藏品系统 数字藏品软件

从数据库发展史看数据库未来技术趋势

OceanBase 数据库

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