我正在开发一个 Rails(4.2) 应用程序,该应用程序在接收大量 JSON 负载时偶尔会出现超时。 rack-timeout gem 表示应用程序在 Unicorn 中的以下代码块上超时(负责以 @socket 开头的行)。
/gems/unicorn-4.8.3/lib/unicorn/stream_input.rb:51:in kgio_wait_readable
rv.replace(@rbuf.slice!(0, @rbuf.size))
until to_read == 0 || eof? || (rv.size > 0 && @chunked)
@socket.kgio_read(to_read, @buf) or eof!
filter_body(@rbuf, @buf)
rv << @rbuf
这仅在生产中,上次发生时有效载荷是 42kb 的 json。即使在运行 unicorn 和运行相同的有效负载时,我也没有成功在本地复制它。在 heroku 上增加 dynos 的数量和大小也没有效果。
在此感谢任何帮助,谢谢。
最佳答案
问题是您的请求花费了超过 30 秒并且 herokur's router is terminating the connection .
我认为对您来说一个好的解决方案是对您的 json 响应进行分页,您可以遵循 github 的文档 https://developer.github.com/v3/#pagination .
关于ruby-on-rails - 大型 JSON 负载 Rails、Heroku、Unicorn 上的机架超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32764704/