【发布时间】:2012-07-16 00:19:28
【问题描述】:
我正在尝试编写一个将组件组合在一起的 Sinatra 应用程序(有点像控制器)。所以对于“博客”相关的事情,我想要一个名为Blog 的应用程序安装在/blog。 Blog 应用程序中包含的所有路由都与其挂载路径相关,因此我可以简单地定义一个index 路由,而无需在路由中指定挂载路径。
我最初通过使用 config.ru 文件和maping 到不同应用程序的路由来处理这个问题。我遇到的问题是我使用了各种需要包含在所有应用程序中的 sinatra gems/extensions/helper,所以有很多重复的代码。
如何将一个 sinatra 应用程序安装在另一个应用程序中,以便应用程序中定义的路由与应用程序的安装位置相关?如果这不可能开箱即用,您能否展示一个代码示例来说明如何做到这一点?
这是一个简化的示例:
class App
mount Blog, at: '/blog'
mount Foo, at: '/bar'
end
class Blog
get '/' do
# index action
end
end
class Foo
get '/' do
# index action
end
end
【问题讨论】:
-
我一直在寻找相同的方法,但似乎我们无法在 Sinatra 上做到这一点。但我找到了一个可以做到这一点的微框架,它真的很棒。看看into cuba。这不是一个完美的解决方案,但您可以在古巴进行下一个项目。
-
你能提供一个你想要的例子吗(在代码中)?
-
@Jeffrey 我添加了一个伪代码示例
-
据我所知,每个 sinatra 应用程序都有一个路由哈希。当您实现
mount方法时,使其遍历应用程序的路由并将前缀添加到路径中。你明白我的意思吗? -
这是一个使用
Rack::URLMap的示例,以防我将来决定使用它:stackoverflow.com/questions/6496433/…