InfoQ

新闻

Rack:处理HTTP请求更简单

作者 Mirko Stocker译者 李明(nasi) 发布于 2008年4月15日 下午9时51分

社区
Ruby
主题
Web框架,
Ruby on Rails,
技术,
脚本
标签
Rails,
Ruby on Rails

Rack提供了Web服务器和Ruby开发框架之间的接口。它将框架编写者从为每个Web服务器单独编写一个处理模块的繁重负担中解脱出来,可以节省大量重复劳动。

Rack相当易用,如下示例便可以让你创建一个运行于Mongrel上的极简应用处理器:

require 'rack'
app = lambda { |env| [200, {"Content-Type" => "text/plain"}, ['Hello World!']] }
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,这也是我最近一直在用的框架。它的设计灵感来自于Campingweb.pyRESTlet

已经有相当多的框架提供了对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

没有回复

回复

独家内容

世界顶尖运动队教练的成功秘诀

本文列出了来自于顶级教练Marc Lammers的9条原则,他是在打造世界最佳曲棍球队的过程中发现这些原则的,文章把这些原则映射到了软件开发实践之中。

探索JVM上的LISP

本文由Per Jacobsson所作,目标读者为有意了解Lisp的Java开发人员。文章探讨了当前可以运行于JVM上的不同Lisp方言,以明快简洁的方式介绍了Lisp程序设计工作机理和其独特之处,并在最后演示了Lisp代码同Java系统的整合过程。

Ruby/Rails: 不一样的'Web'应用

本文以一个实际应用的例子为引子,探讨Ruby/Rails在非传统web系统中应用,以及研究如何定制以Rails为基础的领域特定的MVC框架。

认识云计算

本视频对云计算进行了简要的介绍,主要包括了五部分内容:首先带大家认识“云”,然后对计算机的发展过程进行了阐述,接着介绍了业界现状和企业级/世界级计算的新布局,最后对云计算做了一下展望。

AtomServer:数据分发的发布动力

在这篇文章中,Bryon Jacob和Chris Berry介绍了AtomServer,一个基于Apache Abdera的完整Atom存储实现。在去年,作者一直致力于为其雇主——Homeaway——实现一个Atom存储,现在已开源了其Atom存储框架:AtomServer。

从卓越工程角度看微软中国开发团队的成长

开发团队的成长离不开优秀的人才,简捷有效的流程和高效率工具这三个卓越工程系统中的重要因素。本文作者从这三个因素分析了微软中国开发团队是如何“从优秀到卓越”的。

利用Ruby简化你的Java测试

本文是Productive Java with Ruby系列文章的第一篇,我将从单元测试这个话题开始,让Java的开发人员能够在实际工作中利用Ruby提高工作效率。

与赵进聊SaaS

InfoQ中文站有幸与阿里软件的首席架构师赵进在一起探讨了SaaS的相关话题,包括SOA和ASP与SaaS的异同、云计算、SaaS的前景、它的关键技术、技术瓶颈等等。