Rack是一个高效,简洁的框架(Webserver Interface)。其设计架构十分简单,如下图所示:
(图片来源:http://amberbit.com/blog/2009/04/04/introduction-to-rack-middleware/)
图中的每个Module都可以说是一个Middleware。并且这个类似stack的结构可以“堆积”更多的Middleware。railscasts曾发过一个ResponseTimer Middleware,用来查看一个Rack请求的响应时间。最近利用ResponseTimer的原理,写了一个MiddlewareProfile Middleware,用来查看每一个Middleware在一次Request-Response周期中所占用的时间。这样,当往Rack中添加更多其他的Middleware时,可以利用MiddlewarePorfile来查看是否存在瓶颈。
(源代码见附件)
使用:
以Rack自带的Lobster为基础:
1. 简单应用
app = Rack::Builder.new {
use MiddlewareProfile
use Rack::CommonLogger
use Rack::ShowExceptions
map "/" do
use Rack::Deflater
use Rack::Lint
run Rack::Lobster.new
end
}
将 use MiddlewareProfile放在第一行,是为了显示Rack堆栈中的所有Middleware分别占用时间。控制台输出:
"Rack::Lobster -- 1.002389"
"Rack::Lint -- 0.00181100000000001"
"Rack::Deflater -- 0.000687000000000104"
"Rack::URLMap -- 0.000146999999999897"
"Rack::ShowExceptions -- 7.00000000000145e-05"
"Rack::CommonLogger -- 7.2000000000072e-05"
2. 可以改变use的位置来跳过某些Middleware的Profile:
app = Rack::Builder.new {
use Rack::CommonLogger
use MiddlewareProfile
use Rack::ShowExceptions
map "/" do
use Rack::Deflater
use Rack::Lint
run Rack::Lobster.new
end
}
这样,不会对CommonLogger进行Profile。
3. 使用:only, :except, :threshold参数
use MiddlewareProfile, :only => [Rack::Deflater, Rack::Lint]
只显示:only中指定Middleware的耗时信息
use MiddlewareProfile, :except => [Rack::CommonLogger, Rack::ShowExceptions]
不显示:except中指定的Middleware的耗时信息
use MiddlewareProfile, :threshold => 0.001
只显示耗时大于:threshold的Middleware
当然,这个Middleware只是从很高的层面来分析Rack中的各个Middleware占用的时间,如果要更详细的分析,还需要使用其他的库(ruby-prof...等)。
分享到:
- 2009-05-26 21:27
- 浏览 1534
- 评论(0)
- 论坛回复 / 浏览 (0 / 2028)
- 查看更多
相关推荐
为了使Rack :: SslEnforcer正常工作,它必须位于Rack Middleware的顶部。 使用enable :session会将Rack :: Session :: Cookie放在Rack :: Ssl :: Enforcer之前,并防止Rack :: Ssl :: Enforcer将cookie标记为安全
机架-jsonp-中间件 将所有 .jsonp 请求转换为 jsonp 响应的机架中间件。 概述 ... $ gem install rack-jsonp-middleware 配置 导轨 3 在您的config/application.rb文件中添加: require 'rack
rack-reverse-proxy, rack的反向代理 rack的反向代理:这个 repo 已经移到了 waterlink/rack-reverse-proxy 。
RACK01 网络互联设备
用来连接从服务器直接接出来的电缆,如图,Rack PDU 有7个输出接口(IEC 320-C13 接口类型),一个输入接口(IEC 320-C20 接口类型),NetBAY Rack PDU 可以连接到front-end PDU ,也可以直接连接到UPS,由UPS直接...
rack-attack, 用于阻塞&节流的rack 中间件 :: 攻击 !rack 中间件,用于阻塞&节流滥用请求。Rack::Attack 是一个 rack 中间件,用来保护你的网络应用程序不受坏客户端的影响。 它允许基于请求的任意属性的...
Rack::UTF8Sanitizer 是一个 Rack 中间件用来清理 URI 和 HTTP 请求头部中包含的无效 UTF-8 字符。Rails 的使用方法:config.middleware.insert 0, Rack::UTF8SanitizerRack 的使用方法:use Rack::UTF8Sanitizer
rack-recaptcha, 通过Recaptcha验证验证验证的rack 中间件 机架 recaptcha 在web应用程序中删除这个 rack 中间件,通过Recaptcha启用验证验证。:如何使用配置首先,安装库: [sudo] gem 安装机架 recaptcha你必须在...
rack-1.5.2.gem,难得资源,注意收起
工业 PC SIMATIC Rack PC IL 43[手册]pdf,
机架:: BearerAuth Rack :: BearerAuth是在Rack应用中使用承载身份验证的中间件。... use Rack :: BearerAuth :: Middleware do match path : "/foo" do | token | # validate token # AccessToken.where
关于rack接收机和一些多用户检测的资料,想带到公司看,公司只让上CSDN只好放上面了,希望有用。
三旺 RACK2000说明书(2U,19英寸机架)pdf,三旺 RACK2000说明书(2U,19英寸机架)
Serve 是一个小型的基于Rack的网络伺服器,它能简化从任何文件目录伺服HTML,ERB,Haml以及大量模板语言的工作。 Serve的目标是成为Rails MVC中View的一个轻量化...Serve是使用Rack和Tilt开发的。 标签:Serve
主要介绍rake 接 收 技 术 移动通信
机架::主机重定向 一种精简而简单的Rack中间件,它可以将请求从一台主机重定向到另一台... middleware . use Rack :: HostRedirect , { 'myapp.herokuapp.com' => 'www.myapp.com' } 使用此配置,对myapp.herokuapp.
三旺 MODEL7288RACK(机架式E1/V.35协议转换器)说明书pdf,三旺 MODEL7288RACK(机架式E1/V.35协议转换器)说明书
Rack提供了一个最小化,模块化和适应性强的界面,用于在Ruby中开发Web应用程序。 通过以最简单的方式包装HTTP请求和响应,它将Web服务器,Web框架和软件(所谓的中间件)之间的API统一并提炼成单个方法调用。
platform.zip,平台机架服务器验证点平台
alpha VALUE CLASS pinion and rack齿轮-齿条传动系统pdf,alpha VALUE CLASS pinion and rack齿轮-齿条传动系统