0
我有兩個模塊化西納特拉基於機架的應用:core.rb
& project.rb
:URL使用機架安裝映射整個名稱空間?
# 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
是不是一種選擇,在這裏恐怕
啊,沒有發佈解決方案那麼簡單。那麼'run'和'use'有什麼區別呢?是的,使用'run'結束了完美的工作,謝謝。 –