Добавить маршрут к лихому приложению Sinatra?

Я пытаюсь добавить маршрут в свое лихое приложение, которое будет получать данные от веб-хука.

Я попытался использовать решение здесь, и хотя это создало маршрут, оно сломало приборная панель в «/sample».

Любые идеи?

Вот мой lib/app.rb:

require 'sinatra/base'

class App < Sinatra::Base

  get '/callback' do
    "Callback route."
  end

end

Вот мой конфиг.ру:

require 'dashing'

configure do
  set :auth_token, 'YOUR_AUTH_TOKEN'

  helpers do
    def protected!
      # Put any authentication code you want in here.
      # This method is run before accessing any resource.
    end
  end
end

map Sinatra::Application.assets_prefix do
  run Sinatra::Application.sprockets
end

run Sinatra::Application
run App

ОБНОВЛЕНИЕ:
Я изменил имя маршрута на что-то неясное (чтобы монтирование точно его не использовало). Похоже, какая команда запуска, которую я поставил последней, вступает в силу. Маршрут работает, если запущенное приложение является последним, панель инструментов работает, если запущено Sinatra::Application последним. Но когда один работает, другой нет


person testing_josh    schedule 29.08.2017    source источник
comment
Может быть, это потому, что маршруты каскадируются, например. если у вас есть get '/:id' перед маршрутом get '/sample', второй никогда не попадет, потому что он пойман подстановочным знаком :id. Таким образом, вы можете попробовать изменить порядок или маршруты, или порядок их запуска в config.ru. В любом случае, вы должны показать свой код в вопросе, информации недостаточно, чтобы помочь вам сейчас.   -  person max pleaner    schedule 29.08.2017
comment
Я добавил код в свой исходный пост. Я не думаю, что это моя проблема, потому что я делаю фиксированный маршрут «/ callback» и теперь что-то с параметром.   -  person testing_josh    schedule 29.08.2017
comment
вы пробовали изменить порядок вызовов run в config.ru? Или изменить название маршрута, который вы добавляете? Кроме того, я не знаю.   -  person max pleaner    schedule 29.08.2017
comment
Я изменил имя маршрута на что-то непонятное (чтобы монтировка точно его не использовала). Похоже, какая команда запуска, которую я поставил последней, вступает в силу. Маршрут работает, если run App последний, дашборд работает, если Sinatra::Application последний. Но когда один работает, другой нет.   -  person testing_josh    schedule 29.08.2017


Ответы (1)


Вы можете запускать различные приложения внутри вашего config.ru.

Внутри вашего config.ru замените

map Sinatra::Application.assets_prefix do
  run Sinatra::Application.sprockets
end

run Sinatra::Application
run App

с участием

map('/') { run App }
map('/sample') { run Sinatra::Application }
map(Sinatra::Application.assets_prefix) { run Sinatra::Application.sprockets }

Важно отметить, что делая это, стойка будет обрабатывать префиксы маршрута. Поэтому, если вы перешли к /sample, приложение sinatra, запущенное по этому маршруту, увидит это как /.

config.ru фактически запускается в контексте Rack::Builder. Таким образом, приведенное выше эквивалентно

apps = Rack::Builder.new do 
     map('/') { run App }
     map('/sample') { run Sinatra::Application }
     map(Sinatra::Application.assets_prefix) { run Sinatra::Application.sprockets }
end
run apps
person Cereal    schedule 05.09.2017