2017-08-29 26 views
0

我试图添加一个路由到我的潇洒应用程序,将从webhook接收数据。添加路线,以冲刺sinatra应用程序?

我尝试使用解决方案here,虽然这确实创建了路线,但它打破了'/ sample'的潇洒仪表板。

任何想法?

这里是我的lib/app.rb:

require 'sinatra/base' 

class App < Sinatra::Base 

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

end 

这里是我的config.ru:

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 

UPDATE:
我改变了路线名称晦涩的东西(这样的安装肯定不会使用它)。它看起来像我最后放的那个运行命令是生效的那个命令。如果运行应用程序是最后一次,则该路线起作用,如果运行Sinatra :: Application是仪表板,则仪表板工作。但是,当一个工程,另一个不

+0

也许是因为路由级联,如果你在'get'/'sample'路径前有'get'/:id'',那么第二个将永远不会被击中,因为它被捕获在':id'通配符中。所以你可以尝试改变顺序或路线,或者他们在config.ru中运行的顺序。无论如何,你应该在问题中展示你的代码,现在还没有足够的信息来帮助你。 –

+0

我将代码添加到了我原来的帖子中。我不认为这是我的问题,因为我正在制定一个固定路线'/回调',现在有一个参数。 –

+0

您是否尝试在config.ru中更改'run'调用的顺序?或者改变你添加的路线名称?除此之外,我不知道。 –

回答

0

你可以在你的config.ru运行不同的应用程序。

里面你config.ru,与

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

需要注意的是通过这样做,机架将被处理路由前缀是非常重要的替代

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

run Sinatra::Application 
run App 

。因此,如果您导航到/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