我有一个关于在Sinatra上使用机架安装的问题.我有两个经典风格的Sinatra应用程序.让我们调用app.rb中定义的一个App和api.rb中定义的另一个API.
我希望它能让api.rb处理所有以'/ api'开头的路由,而app.rb会处理所有其他请求,包括root('/').
如何使用机架安装进行设置?或者有更好的解决方案吗?
dun*_*289 27
我想你会更喜欢Rack :: URLMap - 它可能看起来像这样:
run Rack::URLMap.new("/" => App.new,
"/api" => Api.new)
Run Code Online (Sandbox Code Playgroud)
那应该放在你的config.ru档案里.
Mul*_*ins 10
我有类似的问题,我对Rack不是很熟悉.根据上面的答案,我无法弄清楚要做什么.我的最终解决方案是进行以下操作config.ru.
这对我来说非常适合.
# Main Ramaze site
map "/" do
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
require ::File.expand_path('../app', __FILE__)
Ramaze.start(:root => __DIR__, :started => true)
run Ramaze
end
# Sinatra & Grape API
map "/api" do
use Rack::Static, :urls => ["/stylesheets", "/images", "/javascripts"], :root => "public"
use Rack::Session::Cookie
run Rack::Cascade.new([
MySinatraApp::Application,
MySinatraApp::API])
end
在config.ru你还可以利用Sinatra的中间件功能.如果你有几个Sinatra应用程序,每个都有自己的路由,并希望同时运行它们,你可以按照你想要的顺序排列它们,例如
# config.ru
...
use MyAppA
use MyAppB
use MyAppC
run MyAppD
Run Code Online (Sandbox Code Playgroud)