我如何获得 puma rack 应用程序中的所有请求?

How do I get all requests in puma rack app?

我正在写一个非常简单的 puma 服务器, 而且每次请求我都会收到 404。 如何在没有 Sinatra 的情况下配置“/”路径

我只想捕获 所有 个请求。

#config.ru
module Moon
  class HelloWorldApp
    def call(env)
      [200, {}, 'Hello World']
    end
    def each(env=nil)
      env
    end
  end
end

run Rack::Cascade.new Moon::HelloWorldApp.new

我运行是这样的:

$ puma config.ru -p 9595

使用这个卷曲:

$ curl http://0.0.0.0:9595/test

并得到 404:

127.0.0.1 - - [07/Apr/2015:22:49:25 +0300] "GET /test HTTP/1.1" 404 - 0.0002

Rack::Cascade 期望将应用程序的显式 array 传递给构造函数(或者至少类似于响应每个应用程序并生成应用程序的可枚举对象)。然后 calls each on this array 获取每个应用程序(看起来您遇到了无方法错误并尝试通过向您的应用程序添加 each 方法来解决它)。

通过将 run 行更改为:

来修复它
run Rack::Cascade.new [Moon::HelloWorldApp.new]

您还需要更改 returned 数组的正文部分,它需要 responds to each and yields Strings,最简单的修复方法是 return数组:

[200, {}, ['Hello World']]