问题描述
我正在用Rails 6进行API用例的实验。用户会发布大型请求,这些请求将由Rails接收并流到另一个地方。这可能会与JRuby一起运行,但是现在我正在使用MRI Ruby进行测试。 Web服务器是Puma(开箱即用的导轨安装)。
在上载请求流时,是否有任何方法可以读取请求主体,或者Rails是否需要等待整个请求上载才能访问它?
使用此Curl命令:
curl -i -X PUT -T data.bin "http://localhost:3000/welcome/stream"
这个简单的控制器:
def stream
puts "The stream was called"
io = request.body
until io.eof?
io.read(1024*1024)
puts "Read 1MB"
end
head 200,content_type: "text/html"
end
似乎整个请求都在Rails对其进行访问之前在某个地方上演,因为我的任何put出现在控制台上都需要很长时间。
稍作搜索,似乎是Web服务器(Puma,Unicorn等)缓冲了数据,并且仅在接收到所有数据后才调用Rails。
无论如何,有没有开始读取流的内容,或者避免对其进行缓冲?
是Rack还是Puma进行缓冲?如果是这样,它将在哪里缓冲数据?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)