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
- 浏览 1570
- 评论(0)
- 论坛回复 / 浏览 (0 / 2059)
- 查看更多
相关推荐
为了使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反向代理:基于rack-reverse-proxy库》 在Web开发领域,Rack框架是Ruby社区中一个非常重要的组件,它提供了一种标准化的方式来构建Web服务器和应用程序之间的接口。而rack-reverse-proxy则是Rack生态...
标题 "rack-0.87.zip" 暗示我们正在处理一个名为 "Rack" 的开源项目,其版本为0.87。Rack在IT行业中是一个重要的组件,尤其在Ruby on Rails社区中,它作为Web服务器和Rails应用之间的接口。这个压缩包可能包含了Rack...
IBM NetBAY Rack PDU是IBM提供的一种数据中心基础设施解决方案,主要功能是管理和分配机架内的电力供应。这种PDU(Power Distribution Unit)分为三种类型,每种都有其特定的应用场景和设计特点,以确保服务器和其他...
RACK01 网络互联设备
RACK(Receiver for Asynchronous CDMA with Knwon Interference,异步CDMA已知干扰接收机)是一种针对码分多址(CDMA)通信系统的特殊接收机设计,它主要应用于多用户环境,以解决多用户干扰(Multi-User ...
rack-attack, 用于阻塞&节流的rack 中间件 :: 攻击 !rack 中间件,用于阻塞&节流滥用请求。Rack::Attack 是一个 rack 中间件,用来保护你的网络应用程序不受坏客户端的影响。 它允许基于请求的任意属性的...
Rack::UTF8Sanitizer 是一个 Rack 中间件用来清理 URI 和 HTTP 请求头部中包含的无效 UTF-8 字符。Rails 的使用方法:config.middleware.insert 0, Rack::UTF8SanitizerRack 的使用方法:use Rack::UTF8Sanitizer
本手册详细介绍了SIMATIC Rack PC IL 43工业PC的相关操作与安装指南,适用于2005年9月以后交付的SIMATIC Rack PC IL 43系列产品。手册内容包括了设备的简介、描述、应用规划、安装指南、连接步骤、调试方法以及设备...
### Rack教程(Ruby) #### 1. 什么是Rack? Rack是Ruby世界中的一个轻量级、灵活的Web服务器接口规范,它定义了一个统一的标准,使得Ruby Web应用能够与不同的Web服务器无缝集成。Rack简化了Ruby Web应用的部署...
rack-recaptcha, 通过Recaptcha验证验证验证的rack 中间件 机架 recaptcha 在web应用程序中删除这个 rack 中间件,通过Recaptcha启用验证验证。:如何使用配置首先,安装库: [sudo] gem 安装机架 recaptcha你必须在...
rack-1.5.2.gem,难得资源,注意收起
机架:: BearerAuth Rack :: BearerAuth是在Rack应用中使用承载身份验证的中间件。... use Rack :: BearerAuth :: Middleware do match path : "/foo" do | token | # validate token # AccessToken.where
根据提供的文件信息,RACK2000机架是深圳市三旺通信技术有限公司设计开发的一款电信级产品,它具有以下详细知识点: 1. 产品定位:RACK2000机架专为电信工程设计,是一个高集成度的19英寸标准2U机架。 2. 设计功能...
Serve 是一个小型的基于Rack的网络伺服器,它能简化从任何文件目录伺服HTML,ERB,Haml以及大量模板语言的工作。 Serve的目标是成为Rails MVC中View的一个轻量化...Serve是使用Rack和Tilt开发的。 标签:Serve
《艾肯声卡Umix1010Rack_v1.37.10_driver_win10.zip:专业音频编码解码技术解析》 在数字音频领域,声卡扮演着至关重要的角色,它连接着音乐制作人与电脑,提供高质量的声音输入输出。本文将深入探讨艾肯(IK ...
主要介绍rake 接 收 技 术 移动通信
【Muck Rack】2024年年度新闻研究报告.pdf【Muck Rack】2024年年度新闻研究报告.pdf【Muck Rack】2024年年度新闻研究报告.pdf【Muck Rack】2024年年度新闻研究报告.pdf【Muck Rack】2024年年度新闻研究报告.pdf...
`weixin_rails_middleware` 是基于 Ruby 的 Rack 技术构建的,它能够插入到 Rails 应用的请求处理流程中。当收到微信服务器发来的请求时,中间件会自动处理这些请求,如验证签名、解析XML数据,并提供相应的响应。 ...