`
bellstar
  • 浏览: 148500 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

rack介绍

    博客分类:
  • ruby
阅读更多
原文http://chneukirchen.org/blog/archive/2007/02/introducing-rack.html
在web框架实践中我感到痛苦,我发现有许多本质上做相同事情的重复代码。
而每一个ruby web框架开发者还在不断的开发出他需要的web服务程序。
但愿,框架使用者为他们的选择感到满意。
然而,从本质上说,处理HTTP是很容易的。就是你获得一个请求,返回一个响应。
我们可能这样做这件事:由一个类CGI环境接收一个标准http请求的hash,
返回一个由三部分(状态status,头headers,主体body)组成的响应。

这可以很容易地映射为一个ruby方法调用,如下范例
class HelloWorld
	def call(env)
		[200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
	end
end

你所看到就是一个最简单的Rack应用程序

Rack的目标是提供一个最小的API连接到web servers和web框架

非正式情况下,一个Rack应用程序会调用一个带hash参数的#call方法,
它返回一个由status, headers, body组件的数组。body需要调用#each方法,它一个接一个的返回字符串到body中。
这个给定的hash参数包含一个环境变量的CGI-ish集合和一些特定值,
(env['rack.input'])或者有关运行时环境的信息(例如env['rack.run_once'])

请记住Rack主要是用于框架开发者,通常不暴露给框架使用者,rack刚开始看起来也许有点笨拙,
或者你也许期望更多"优美"的API,但API就应该是简单的(可方便用作lambda)而不是难于接受(暴露的适配器仅仅只有5行代码)


在上面这个最小化API里,有一个库为经常做的事(像query parsing或cookie处理)提供了很多便利(Rack::Requrest和Rack::Response),
愿意的话,你可以免费使用。

但是Rack真正酷的地方在于它提供了一种极其简单的方式组合web应用程序,
毕竟,它仅仅是Ruby对象和它的一个方法的事。而且调用#call不必是一个真实的web server,也可以是另一个程序!
让我向你展示一些已经存在的Rack filters(或者叫中间件):
  • Rack::ShowExceptions 捕获所有抛出的异常然后用500-page包装好它们,源自Django(一个python web框架)
  • Rack::CommonLogger Apache风格的日志
  • Rack::URLMap 根据path和host跳转到不同的Rack应用程序(一个非常简单的路由)

还有另一个工具,Rack::Lint,它检查你的应用程序和filter和其他的filter在一起是否运行良好

如果你的web框架支持Rack,有以下好处:

       
  • 提供一个Rack处理器为web servers工作
  •    
  • 在没有扩展配置的情况下让多个应用跑在一个web servers上
  •    
  • 易于测试(集成和功能测试),从此任何东西可mocked. (Helpers for this are coming soon, too.)
  •    
  • 一个很大的不同,从此程序员可以专注于特别的部分上,而停止在烦人的事情上浪费时间。
  •    
  • 更多协作特性: 比较 “That upload handler you wrote for IOWA is really great, too bad I use Camping.” 和 “That upload handler you wrote for Rack works great for me too!”

Rack由Campinghttp://code.whytheluckystiff.net/camping/和ramazehttp://ramaze.rubyforge.org/提供支持
email:chneukirchen@gmail.com
irc:chris2@#ruby-lang on FreeNode
Rack主页http://rack.github.com/
一个教程http://asciicasts.com/episodes/151-rack-middleware
1
0
分享到:
评论

相关推荐

    IBM NetBAY Rack PDU 介绍

    IBM NetBAYPDU (Power Distribution Units) 是用来连接机架内部的电源线缆的,一共由3种类型的PDU,分别发挥不同作用,以下是各种PDU的介绍: 1.NetBAY Rack Power Distribution Unit 用来连接从服务器直接接出来的...

    rack 接 收 技 术

    主要介绍rake 接 收 技 术 移动通信

    西门子 SIMATIC Rack PC 847B产品介绍.pdf

    西门子 SIMATIC Rack PC 847B产品介绍pdf,这款新型的19英寸机架式工控机配备了功能强大的Intel Core 2 Duo 处理器,具有出色的运算能力并辅之以PCI-Express技术(可选的8或11个 PCI/PCI- Express插槽),使之成为高...

    Inspur Cloud rack

    Inspur 最新Rack服务器介绍,讲述其设计架构,以及行业分析,对更好的理解服务器有新的帮助

    RACK1000说明书(2U,19英寸机架)

    介绍了关于RACK1000说明书(2U,19英寸机架)的详细说明,提供其它产品的技术资料的下载。

    rack-mini-profiler:用于开发和生产Ruby机架应用程序的Profiler

    如果您想采取任何一种行动,请提出一个问题,并向我们介绍您的进展。 安装 在Ruby 2.4+中安装/添加到Gemfile gem 'rack-mini-profiler' 注意:确保在Gemfile中的pg和mysql gem之下要求rack_mini_profiler。 如果...

    garner:一套实现各种缓存策略的Rack中间件和缓存助手

    如果您不熟悉HTTP缓存,ETag和If-Modified-Since,请观看我们在GoRuCo 2012上介绍Garner在。升级中Garner当前的稳定发行版为0.5.x,其中包含与以前的0.3.x系列相比的许多重大更改。 有关重要更改的摘要,请参见。...

    机架攻击:用于阻止和限制的机架中间件

    请参阅介绍Rack :: Attack的。 目录 入门 正在安装 将此行添加到您的应用程序的Gemfile中: # In your Gemfile gem 'rack-attack' 然后执行: $ bundle 或自己安装为: $ gem install rack-attack 插入应用程序...

    浪潮服务器NF5280M3产品简介.docx

    浪潮InCloudRail3000 产品手册 2016年7月 本文档为售前工程师、对技术感兴趣的销售人员/客户提供一个浪潮InCloudRail3000的产品介绍。 适合销售人员、售前工程师参考,以及用户了解产品技术。 浪潮服务器NF5280M3...

    学完稳过GB10-120 华三IT售前专家和 GB10-133 华三IT销售专家,共11门课程教材.zip

    001存储基础知识.pptx ...006H3C UniServer G3 2P Rack服务器产品培训.pdf 007新华三集团2018年DL380Gen10_Larry.pdf 008Synergy 产品渠道培训.pdf 009新华三集团 BL460C Gen10.pdf 010HPE ProLiant DL385 Gen10.pdf

    jammit-sinatra:与SinatraPadrino一起使用的Jammit Rack中间件

    贾米特·辛纳特拉(Jammit Sinatra)介绍Jammit-Sinatra是一个Jammit包装器,可让Jammit在Sinatra / Padrino Web应用程序中正常工作。 它包括中间件和固定视图助手( include_javascripts和include_stylesheets )。...

    计算机网络技术实习报告

    1. 两个RACK组联合完成如下拓扑结构。(见图1) 2. 三个RACK组联合实现如下拓扑结构。(见图2) (1)第1,2组、第3,4组按照图1组成拓扑网络,第5,6,7组按照图2。 (2)各小组协商解决地址规划问题;网络设备的...

    omniauth:OmniAuth是利用Rack中间件的灵活身份验证系统

    一个介绍 OmniAuth是一个库,用于标准化Web应用程序的多提供商身份验证。 它被创建为功能强大,灵活且功能尽可能少。 任何开发人员都可以为OmniAuth创建可以通过不同系统对用户进行身份验证的策略。 已为从Facebook...

    服务器基础功能介绍P.pptx

    并具备较好的散热性 机架式(RACK)服务器:机架结构是传统电信机房的设备结构标准,宽度为19英寸,高度以单位"U"计 算,每"U"为1.75英寸,既1.75X2.54=4.445cm 刀片式服务器(Blade Server):通常在一个机箱里可以...

    redis-stat监控集成包完整版.zip

    软件介绍: 已经收集齐全的redis-stat集成包打包在一起,免去了去rubygem上单独下载的繁琐。ansi256-0.2.5.gemdaemons-1.1.9.gemelasticsearch-1.0.0.gemelasticsearch-api-1.0.0.gemelasticsearch-transport-...

    H3C IT服务器存储售前专家认证培训.rar

    2 新华三3PAR产品及特性介绍(渠道培训) 3 新华三集团2018年关键业务服务器v1 4 新华三2018年HPE DL560-580Gen10-H3C R6900G3产品 5 新华三集团2018年BL460C Gen10 有声 6 H3C UniServer G3 2P Rack服务器产品 7 ...

    rory:耶! 另一个基于Rack的Ruby Web框架。 正是世界所需要的

    介绍Rory是的框架。 它的约定与约定非常相似,但更少。 罗里(Rory)最初是一个自学项目,但现在已经发展到可以在生产环境中使用的程度。 因此,它的设计目标是一个移动的目标,但正从“了解Rails的设计和实现”逐渐...

    Aerotech A3200 Training_V1.1.pdf

    激光行业中及一些高精度需求的行业中关于硬件的介绍,包括软件的一些编译D A N G E R : This product contains potentially lethal voltages. To reduce the possibility of electrical shock, bodily injury, or ...

    简单但灵活的HTTP客户端库,支持多个后端。-Ruby开发

    入门最好的起点是法拉第网站,及其介绍和说明。 需要更多细节吗? 请参阅《 Faraday API文档》以了解其内部工作方式。 支持的Ruby版本此库旨在支持以下Ruby实现,并已针对以下Ruby实现进行了测试:

    RedGiant_AE烟雾水火Image_Lounge_1.4.5

    插件效果介绍 1 IL Alpha Ramp(Alpha渐变) 2 IL Border Patrol(圆角) 3 IL Color Map(彩色贴图) 4 IL Effect Blender(效果混合器) 5 IL Fractal Brimstone(不规则的硫磺) 6 IL Fractal Clouds(不...

Global site tag (gtag.js) - Google Analytics