如何在puma rack app中获取所有请求?

时间:2015-04-07 19:52:11

标签: ruby rack 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

1 个答案:

答案 0 :(得分:1)

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

通过将run行更改为:

来解决此问题
run Rack::Cascade.new [Moon::HelloWorldApp.new]

您还需要更改返回数组的正文部分,它需要是responds to each and yields Strings,最简单的方法是返回一个数组:

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