Подтвердить что ты не робот

Несколько приложений Sinatra, использующих стойку

У меня есть вопрос относительно использования стойки с Sinatra. У меня есть два приложения Sinatra в классическом стиле. Позвольте называть одно приложение, определенное в app.rb, и другой API, определенный в api.rb.

Мне бы хотелось, чтобы api.rb обрабатывал все маршруты, начинающиеся с '/api', а app.rb обрабатывает все остальные запросы, включая root ('/').

Как я могу установить это со стойкой? Или есть лучшее решение, чем это?

4b9b3361

Ответ 1

Я думаю, вы предпочтете Rack:: URLMap - он, вероятно, будет выглядеть примерно так:

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

Это должно быть в вашем файле config.ru.

Ответ 2

У меня была аналогичная проблема, и я не очень хорошо разбираюсь в 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

Ответ 3

В config.ru вы также можете воспользоваться функцией промежуточного программного обеспечения Sinatra. Если у вас есть несколько приложений Sinatra, каждый из которых имеет свои собственные маршруты и хочет их запустить одновременно, вы можете упорядочить их в том порядке, в котором вы хотите их найти, например.

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

Ответ 4

У меня была одна и та же проблема, и я придумал этот шаблон: sinatra-rspec-bundler-template, который выкладывается для нескольких приложений.

У него может быть больше возможностей, чем вам нужно, но оно должно помочь вам, когда вам нужно что-то "немного более".