【发布时间】:2014-01-30 10:06:32
【问题描述】:
我有两个基于模块化 Sinatra 机架的应用程序:core.rb 和 project.rb:
# 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 类,而其他一切都由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 时会抛出一个错误,指出它在我的主core.rb 文件中找不到/foo 路线 - 这是NOT 我想要的。换句话说,它在错误的文件中寻找我的/foo 路由:(
那么,是否可以使用机架安装映射整个 /projects 命名空间?不,在project.rb 的所有路线中添加“/projects/”恐怕不是一个选项。
【问题讨论】: