Rack提供簡易routing 功能,能夠不同URL (PATH_INFO, SCRIPT_NAME) 執行不同的middleware。
[code lang="ruby"]
app = Rack::Builder.new do
use Rack::CommonLogger
use Rack::ShowExceptions
map '/env' do
run Proc.new {|env| [200, {"Content-Type" => "text/html"}, env.inspect]}
end
map '/' do
run lambda {|env| [200, { 'Content-Type' => 'text/plain' }, ["Hello World!"] ] }
end
map "/lobster" do
use Rack::ShowExceptions
run Rack::Lobster.new
end
end
Rack::Handler::WEBrick.run app, : Port => 9292
[/code]
或者利用 Rack::URLMap 組出 url path 對映 app之關系
[code lang="ruby"]
hello_app = lambda {|env| [200, { 'Content-Type' => 'text/plain' }, ["Hello World!"] ] }
env_app = Proc.new {|env| [200, {"Content-Type" => "text/html"}, env.inspect]}
lobster_app = Rack::Lobster.new
app = Rack::Builder.new do
use Rack::CommonLogger
use Rack::ShowExceptions
run Rack::URLMap.new '/' => hello_app, '/env' => env_app, '/lobster' => lobster_app
end
Rack::Handler::WEBrick.run app, : Port => 9292
[/code]
Rack 提供urlmap算是簡易的routing功能, 通常都是Framework自行撰寫routing機制,內建Rack Routing僅限單純應用。