我怎样才能爱上heroku H13?

时间:2019-09-22 15:48:55

标签: ruby-on-rails ruby heroku

自从我将应用程序(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错误的方法。

谢谢。

2 个答案:

答案 0 :(得分:0)

一些想法,因为我不知道您的确切情况:

  • 如果您的服务器(例如Unicorn)工作者超时设置为小于30 秒,您可以尝试将其增加到更高的值(但Heroku 明确将其限制为30秒。)
  • 如果仅当您在闲置(休眠)一段时间后首次尝试加载该应用程序时才发生这种情况,那么这是可以预期的。不过,随后的请求应该很快。
  • 如果要在HTTP请求上下文中执行较长的过程 并且通常需要30秒钟以上才能完成,您可能 想考虑使用后台作业管理器(例如,Sidekiq Ruby)来在应用程序后台运行此类进程。

答案 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