如何在Sinatra项目中添加额外的路线?

时间:2018-10-22 18:44:34

标签: ruby sinatra

我如何prepend在另一类宝石的Sinatra类中增加一条路线?

我如何锻炼

module StealthWebhook
  module Route
    post '/api/v1/webhook' do
      response_status, response_body = Webhook.send_request(request)

      status response_status
      body response_body
    end
  end
end


module Stealth
  class Server < Sinatra::Base
    prepend StealthWebhook::Route
  end
end

我需要在this class

中添加此路线

但我收到此错误:

bundler: failed to load command: puma (/usr/local/bundle/bin/puma)
bot_1       | NoMethodError: undefined method `post' for StealthWebhook::Route:Module
bot_1       |   /bot/lib/stealth-webhook/lib/stealth-webhook/route.rb:6:in `<module:Route>'
bot_1       |   /bot/lib/stealth-webhook/lib/stealth-webhook/route.rb:4:in `<module:StealthWebhook>'
bot_1       |   /bot/lib/stealth-webhook/lib/stealth-webhook/route.rb:3:in `<top (required)>'
bot_1       |   /bot/lib/stealth-webhook/lib/stealth-webhook/base.rb:5:in `require_relative'
bot_1       |   /bot/lib/stealth-webhook/lib/stealth-webhook/base.rb:5:in `<top (required)>'
bot_1       |   /bot/lib/stealth-webhook/lib/stealth-webhook.rb:1:in `require_relative'
bot_1       |   /bot/lib/stealth-webhook/lib/stealth-webhook.rb:1:in `<top (required)>'
bot_1       |   /bot/lib/aggregator.rb:5:in `require_relative'
bot_1       |   /bot/lib/aggregator.rb:5:in `<top (required)>'
bot_1       |   /bot/config/initializers/overridings.rb:1:in `require_relative'
bot_1       |   /bot/config/initializers/overridings.rb:1:in `<top (required)>'
bot_1       |   /usr/local/bundle/gems/stealth-1.0.4/lib/stealth/base.rb:85:in `require_relative'
bot_1       |   /usr/local/bundle/gems/stealth-1.0.4/lib/stealth/base.rb:85:in `block in require_directory'
bot_1       |   /usr/local/bundle/gems/stealth-1.0.4/lib/stealth/base.rb:93:in `each'
bot_1       |   /usr/local/bundle/gems/stealth-1.0.4/lib/stealth/base.rb:93:in `for_each_file_in'
bot_1       |   /usr/local/bundle/gems/stealth-1.0.4/lib/stealth/base.rb:85:in `require_directory'
bot_1       |   /usr/local/bundle/gems/stealth-1.0.4/lib/stealth/base.rb:66:in `load_environment'
bot_1       |   /usr/local/bundle/gems/stealth-1.0.4/lib/stealth/base.rb:33:in `boot'
bot_1       |   /bot/config/boot.rb:6:in `<top (required)>'
bot_1       |   config.ru:2:in `require_relative'
bot_1       |   config.ru:2:in `block in <main>'
bot_1       |   /usr/local/bundle/gems/rack-2.0.5/lib/rack/builder.rb:55:in `instance_eval'
bot_1       |   /usr/local/bundle/gems/rack-2.0.5/lib/rack/builder.rb:55:in `initialize'
bot_1       |   config.ru:in `new'
bot_1       |   config.ru:in `<main>'
bot_1       |   /usr/local/bundle/gems/rack-2.0.5/lib/rack/builder.rb:49:in `eval'
bot_1       |   /usr/local/bundle/gems/rack-2.0.5/lib/rack/builder.rb:49:in `new_from_string'
bot_1       |   /usr/local/bundle/gems/rack-2.0.5/lib/rack/builder.rb:40:in `parse_file'
bot_1       |   /usr/local/bundle/gems/puma-3.12.0/lib/puma/configuration.rb:318:in `load_rackup'
bot_1       |   /usr/local/bundle/gems/puma-3.12.0/lib/puma/configuration.rb:243:in `app'
bot_1       |   /usr/local/bundle/gems/puma-3.12.0/lib/puma/runner.rb:145:in `load_and_bind'
bot_1       |   /usr/local/bundle/gems/puma-3.12.0/lib/puma/single.rb:96:in `run'
bot_1       |   /usr/local/bundle/gems/puma-3.12.0/lib/puma/launcher.rb:184:in `run'
bot_1       |   /usr/local/bundle/gems/puma-3.12.0/lib/puma/cli.rb:78:in `run'
bot_1       |   /usr/local/bundle/gems/puma-3.12.0/bin/puma:10:in `<top (required)>'
bot_1       |   /usr/local/bundle/bin/puma:29:in `load'
bot_1       |   /usr/local/bundle/bin/puma:29:in `<top (required)>'

编辑:

我使用Stealth::Server.post解决了。这是最好的方法吗?

module StealthWebhook
  module Route
    Stealth::Server.post '/api/v1/webhook' do
      response_status, response_body = Webhook.send_request(request)

      status response_status
      body response_body
    end
  end
end


module Stealth
  class Server < Sinatra::Base
    prepend StealthWebhook::Route
  end
end

0 个答案:

没有答案