简单的rackup配置
infinity = Proc.new {|env| [200, {"Content-Type" => "text/html"}, env.inspect]}
use Rack::CommonLogger
use Rack::ShowExceptions
map '/' do
run infinity
end
map '/version' do
map '/' do
run Proc.new {|env| [200, {"Content-Type" => "text/html"}, "infinity 0.1"] }
end
map '/last' do
run Proc.new {|env| [200, {"Content-Type" => "text/html"}, Rack::Request.new(env).params.inspect] }
end
end
执行先安装rack gem install rack
使用 rackup -R infinity.ru -p 3000
其中map的写法和routes.rb中做法差不多,回顾一下routes.rb中的写法。
ActionController::Routing::Routes.draw do |map|
map.connect ':controller/:action/:id'
end
routes.rb里面发生了什么呢?很不幸、里面过程错综复杂,横跨了至少四个类Builder,Mapper,Route,RouteSet,我只能告诉你结果,一句map.connect生成了一个Route对象。
rack代码则简单的我可以轻易的讨论。
module Rack
...
class Builder
def initialize(&block)
@ins = []
instance_eval(&block) if block_given?
end
...
def map(path, &block)
if @ins.last.kind_of? Hash
@ins.last[path] = self.class.new(&block).to_app
else
@ins << {}
map(path, &block)
end
end
def to_app
@ins[-1] = Rack::URLMap.new(@ins.last) if Hash === @ins.last
inner_app = @ins.last
@ins[0...-1].reverse.inject(inner_app) { |a, e| e.call(a) }
end
...
end
end
module Rack
...
class URLMap
def initialize(map)
@mapping = map.map { |location, app|
if location =~ %r{\Ahttps?://(.*?)(/.*)}
host, location = $1, $2
else
host = nil
end
unless location[0] == ?/
raise ArgumentError, "paths need to start with /"
end
location = location.chomp('/')
[host, location, app]
}.sort_by { |(h, l, a)| [-l.size, h.to_s.size] } # Longest path first
end
...
end
end
注意[0...-1]是不包含-1这个元素的,所以to_app只执行了前两句。map最终生成了一个url和Rack::URLMap对象的Hash。而在rails当中,url被切割成了多个segments。Rails这样作也自有其用处,常见的redirect_to :action => 'action'就是这样构造出url的,但是对于轻量级应用,就有一点大炮打蚊子了。
分享到:
相关推荐
关于rack接收机和一些多用户检测的资料,想带到公司看,公司只让上CSDN只好放上面了,希望有用。
rack-reverse-proxy, rack的反向代理 rack的反向代理:这个 repo 已经移到了 waterlink/rack-reverse-proxy 。
RACK01 网络互联设备
rack-attack, 用于阻塞&节流的rack 中间件 :: 攻击 !rack 中间件,用于阻塞&节流滥用请求。Rack::Attack 是一个 rack 中间件,用来保护你的网络应用程序不受坏客户端的影响。 它允许基于请求的任意属性的...
用来连接从服务器直接接出来的电缆,如图,Rack PDU 有7个输出接口(IEC 320-C13 接口类型),一个输入接口(IEC 320-C20 接口类型),NetBAY Rack PDU 可以连接到front-end PDU ,也可以直接连接到UPS,由UPS直接...
rack-offline, 用于构建脱机web应用程序的rack 和 Rails 插件 HTML5离线HTML5提供了两种在流行的移动设备( 如iPhone和 Android ) 以及基于 webkit 和on的现代桌面浏览器实现。用法使用 Rack::Offline 最简单的方法是...
rack-recaptcha, 通过Recaptcha验证验证验证的rack 中间件 机架 recaptcha 在web应用程序中删除这个 rack 中间件,通过Recaptcha启用验证验证。:如何使用配置首先,安装库: [sudo] gem 安装机架 recaptcha你必须在...
Serve 是一个小型的基于Rack的网络伺服器,它能简化从任何文件目录伺服HTML,ERB,Haml以及大量模板语言的工作。 Serve的目标是成为Rails MVC中View的一个轻量化...Serve是使用Rack和Tilt开发的。 标签:Serve
工业 PC SIMATIC Rack PC IL 43[手册]pdf,
rack-1.5.2.gem,难得资源,注意收起
雷子克-rack H系列温控和加热器说明pdf,雷子克-rack H系列温控和加热器说明
三旺 RACK2000说明书(2U,19英寸机架)pdf,三旺 RACK2000说明书(2U,19英寸机架)
Rack::UTF8Sanitizer 是一个 Rack 中间件用来清理 URI 和 HTTP 请求头部中包含的无效 UTF-8 字符。Rails 的使用方法:config.middleware.insert 0, Rack::UTF8SanitizerRack 的使用方法:use Rack::UTF8Sanitizer
Rack提供了一个最小化,模块化和适应性强的界面,用于在Ruby中开发Web应用程序。 通过以最简单的方式包装HTTP请求和响应,它将Web服务器,Web框架和软件(所谓的中间件)之间的API统一并提炼成单个方法调用。
主要介绍rake 接 收 技 术 移动通信
三旺 MODEL7288RACK(机架式E1/V.35协议转换器)说明书pdf,三旺 MODEL7288RACK(机架式E1/V.35协议转换器)说明书
mruby-rack-json-api, 带有 Mruby rack Redis和H2O的快速 JSON API应用 基于 /MRuby rack Redis H2O的应用演示如何使用 MRuby 。rack 。 Redis和 H2O构建和分发真正快速的JSON API应用。解释有关如何工作的完整说明...
platform.zip,平台机架服务器验证点平台
alpha VALUE CLASS pinion and rack齿轮-齿条传动系统pdf,alpha VALUE CLASS pinion and rack齿轮-齿条传动系统
工业 PC SIMATIC Rack PC 840 V2[手册]pdf,