使用机架安装的多个Sinatra应用程序

我有一个关于在Sinatra上使用机架安装的问题。 我有两个经典风格的Sinatra应用程序。 让我们调用app.rb中定义的一个App和api.rb中定义的另一个API。

我希望它能让api.rb处理所有以’/ api’开头的路由,而app.rb会处理所有其他请求,包括root(’/’)。

如何使用机架安装进行设置? 或者有更好的解决方案吗?

我想你会更喜欢Rack :: URLMap – 它可能看起来像这样:

run Rack::URLMap.new("/" => App.new, "/api" => Api.new) 

这应该在你的config.ru文件中。

我有类似的问题,我对Rack不太熟悉。 根据上面的答案,我无法弄清楚要做什么。 我的最终解决方案是在config.ru有以下内容。

这对我来说很完美。

 #Main Ramaze网站
地图“/”做

     Encoding.default_external =编码:: UTF_8
     Encoding.default_internal =编码:: UTF_8

     require :: File.expand_path('../ app',__ FILE__)

     Ramaze.start(:root => __DIR __,:started => true)
    拉玛兹

结束

 #Sinatra&Grape API
地图“/ api”做

    使用Rack :: Static,:urls => [“/ stylesheets”,“/ images”,“/ javascripts”],:root =>“public”
    使用Rack :: Session :: Cookie

    运行Rack :: Cascade.new([
         MySinatraApp ::应用,
         MySinatraApp :: API])

结束

config.ru您还可以利用Sinatra的中间件function。 如果你有几个Sinatra应用程序,每个都有自己的路由,并且想要同时运行它们,你可以按照你想要的顺序排列它们,例如

 # config.ru ... use MyAppA use MyAppB use MyAppC run MyAppD 

我曾经遇到过同样的问题,所以我想出了这个模板: sinatra-rspec-bundler-template ,它是针对多个应用程序而设计的。

它可能具有比您需要的function更多的function,但它可以在您需要“更复杂”的东西时帮助您。