【问题标题】:Rack/Sinatra Method Not Allowed不允许使用机架/Sinatra 方法
【发布时间】:2013-12-21 11:11:39
【问题描述】:

我正在使用 Sinatra 开发一个简单的 Web 应用程序,并使用 rack 作为中间件,因此有一个 config.ru。 要运行应用程序,我使用shotgun config.ru

当应用程序发出GET 请求时,我没有问题。但是我的应用有几个POST 请求,当我通过POST 方法提交表单时,我收到了这个奇怪的错误:

Method Not Allowed

以下是我config.ru的内容:

require "rack"
require 'rack/contrib/try_static'
require File.expand_path("app", File.dirname(__FILE__))

use Rack::TryStatic, :root => File.join(App::SETTINGS.source, App::SETTINGS.site.config['destination']), :urls => %w[/]

run App

知道什么可以解决这个问题吗?

谢谢

【问题讨论】:

    标签: ruby sinatra rack


    【解决方案1】:

    以下内容不会回复帖子:

    get '/hi' do
     "Hello World!"
    end
    

    您很可能需要执行以下操作:

    post '/hi' do
      # do post stuff
    end
    

    【讨论】:

    • 是的,我知道!我使用post 定义而不是get。仍然没有运气:(
    【解决方案2】:

    我解决了这个问题。 这是rack 的问题。

    我换了

    use Rack::TryStatic, 
        :root => File.join(App::SETTINGS.source, App::SETTINGS.site.config['destination']), 
        :urls => %w[/]
    

    与:

    use Rack::Static,
        :urls => ["/#{App::SETTINGS.site.config['destination']}"],
        :root => File.join(App::SETTINGS.source, App::SETTINGS.site.config['destination'])
    

    【讨论】:

    • 你给的选项不一样,还有TryStatic calls Static under the hood anyway
    • 确实如此。但是对于除GET 之外的任何请求,TryStatic 会给您一个 405 错误。
    • 因为静态页面只能通过 GET 调用。它们是静态的,不需要处理。您已将:urls%w[/] 一起使用,而不是:try,这意味着中间件将拦截所有 请求,因此您定义的POST 等路由将无法到达。跨度>
    • 我更改了 urls 选项。你检查答案了吗?
    猜你喜欢
    • 2020-12-02
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多