在 Rails 应用程序中安装 Sinatra 应用程序及其所有路由

Mounting a Sinatra app and all its routes in a Rails application

我有以下 Sinatra 应用程序:

class MyFakeAPI < Sinatra::Base
  get "/" do
    "Hello World"
  end

  get "widgets" do
    # code that renders widgets.json
  end
end

我正在尝试,当 运行 集成测试时,为这个 Sinatra 应用程序提供服务,以请求 /api 代表一个很少使用的第三方 api。

伪造的 api 在通过网络模拟的 to_rack 方法调用时效果很好。

然而当我这样挂载时:

if Rails.env.test?
  mount MyFakeAPI.new => "/api"
end

访问 /api 呈现 hello world,但访问 /api/widgets 会产生 rails 路由错误。

如何将 /api 下的所有流量路由到 Sinatra 应用程序?

所以问题最终是我错过了 get 路由中小部件之前的前导 /,所以它没有被正确路由。