2014-01-30 51 views
0

我有兩個模塊化西納特拉基於機架的應用:core.rb & project.rbURL使用機架安裝映射整個名稱空間?

# core.rb 
class Core < Sinatra::Base 
    get "/" do 
    "Hello, world!" 
    end 
end 

# project.rb 
class Project < Sinatra::Base 
    get "/" do 
    "A snazzy little Sinatra project I wish to showcase." 
    end 
    get "/foo" do 
    "If you see this, congratulations." 
    end 
end 

我的目標很簡單,就是整個/projects命名空間映射到Project類,wheras其餘的都被Core類處理。我發現你可以用2種方法在一定程度上做到這一點:

# config.ru 
require "./core.rb" 
require "./projects.rb" 

map "/projects" do 
    # Method #1: Using Sinatra's built-in Middleware 
    use Project 
    # Method #2: Using Rack::Cascade 
    run Rack::Cascade.new([Project, Core]) 
end 
run Core 

我上面試過的兩種方法都有同樣的效果。路線//projects顯示正確,但是當去/projects/foo它拋出一個錯誤,指出它不能找到/foo路線在我的主core.rb文件 - 這是不是我想要的。換句話說,它正在尋找我的/foo路由在錯誤的文件:(

因此,是否有可能映射整個/projects命名空間使用機架安裝?並且不,將「/ projects /」添加到我所有的路由project.rb是不是一種選擇,在這裏恐怕

回答

2

config.ru文件似乎工作時,我測試了好了,但它看起來有點迷糊下面是實現同樣的事情,一個簡單的例子:。

map "/projects" do 
    run Project # note run, not use 
end 
run Core 

現在任何請求的路徑以/projects開頭w生病將被路由到Project應用程序,而其他所有將轉到Core,該自動與根路徑相關聯。

+0

啊,沒有發佈解決方案那麼簡單。那麼'run'和'use'有什麼區別呢?是的,使用'run'結束了完美的工作,謝謝。 –

相關問題