Несколько приложений Sinatra с использованием стоечного монтажа - PullRequest
17 голосов
/ 27 июня 2011

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

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

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

Ответы [ 4 ]

27 голосов
/ 27 июня 2011

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

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

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

10 голосов
/ 08 июля 2011

У меня была похожая проблема, и я не очень знаком с 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
9 голосов
/ 24 сентября 2012

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

# config.ru
...
use MyAppA
use MyAppB
use MyAppC
run MyAppD
3 голосов
/ 28 июня 2011

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

Возможно, у него больше возможностейчем вам нужно, но это должно помочь вам, когда вам нужно что-то «немного более сложное».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...