Ответ 1
Я думаю, вы предпочтете Rack:: URLMap - он, вероятно, будет выглядеть примерно так:
run Rack::URLMap.new("/" => App.new,
"/api" => Api.new)
Это должно быть в вашем файле config.ru
.
У меня есть вопрос относительно использования стойки с Sinatra. У меня есть два приложения Sinatra в классическом стиле. Позвольте называть одно приложение, определенное в app.rb, и другой API, определенный в api.rb.
Мне бы хотелось, чтобы api.rb обрабатывал все маршруты, начинающиеся с '/api', а app.rb обрабатывает все остальные запросы, включая root ('/').
Как я могу установить это со стойкой? Или есть лучшее решение, чем это?
Я думаю, вы предпочтете Rack:: URLMap - он, вероятно, будет выглядеть примерно так:
run Rack::URLMap.new("/" => App.new,
"/api" => Api.new)
Это должно быть в вашем файле config.ru
.
У меня была аналогичная проблема, и я не очень хорошо разбираюсь в 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
У меня была одна и та же проблема, и я придумал этот шаблон: sinatra-rspec-bundler-template, который выкладывается для нескольких приложений.
У него может быть больше возможностей, чем вам нужно, но оно должно помочь вам, когда вам нужно что-то "немного более".