自从我将应用程序(Ruby on Rails)部署到heroku以来,过去两天我一直在断断续续地收到此错误。
2019-09-22T15:35:11.196499+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path="/" host=myapp.herokuapp.com request_id=82376036-bcc3-4f63-8019-1b206e534947 fwd="60.114.58.106" dyno=web.1 connect=1ms service=908ms status=503 bytes=0 protocol=https
2019-09-22T15:35:11.252159+00:00 heroku[web.1]: Process exited with status 134
我尝试了以下命令,但无法解决错误。
$heroku container:rm web
$heroku container:push web
$heroku container:release web
我想知道解决H13错误的方法。
谢谢。
答案 0 :(得分:0)
一些想法,因为我不知道您的确切情况:
答案 1 :(得分:0)
H13-连接已关闭,无响应
当您的Web dyno中的进程接受连接,但随后关闭套接字而不对其进行任何写操作时,将引发此错误。
可能发生这种情况的一个示例是,当Unicorn Web服务器配置的超时时间短于30秒,并且在发生超时之前,工作人员尚未处理请求。在这种情况下,Unicorn在写入任何数据之前会关闭连接,从而导致H13。
几行,您说15秒后进程超时错误:
ERROR -- : worker=1 PID:8 timeout (16s > 15s), killing
Heroku帮助中有一个有关超时设置的部分:
在Unicorn中,您可以像这样在config / unicorn.rb中设置超时时间:
timeout 15
一旦Unicorn开始处理请求,计时器将开始,如果经过15秒,则主进程将向工作人员发送SIGKILL,但不会引发异常。
P.s。如果您在一个请求中遇到上述错误,则可以尝试以下步骤-
-> push the API call to background job
-> submit the form as ajax
-> In the action which handle submit, trigger the background job and render the job_id , the path to which need to be redirected and other parameter you want to reuse
-> On success of ajax request, trigger another ajax call to a separate method which keep checking the status of the job after a fix interval say 3 seconds.
-> when the second ajax call see that status is complete, it will reload the page