关于ruby on rails:如何增加Heroku 30s h12超时

How to increase Heroku 30s h12 timeout

我正在运行一个rails应用程序,它有一个用c ++开发的本地客户端的json webservice调用(带有多部分json形式的post命令,上传流式文件)

我已经阅读了关于路由网格的Heroku文档,提到了关于http连接的30s Heroku限制,以及关于长轮询选择,指的是工作人员dynos。

在我的电话中,我处理pdf文件并在其中插入签名。这个pdf文档可以是100kb或11Mb(或者更多)。

我知道我最终必须在后台进程中执行此操作,但我希望在必须之前避免这样做。

你知道增加超时的方法吗?

正如您在下面的代码中看到的那样,我在保存后处理我的文档(我在after_save中执行此操作,但更改为希望在处理之前发送响应的控制器)。

我希望客户端在文档处理之前得到一个响应,但我仍然在heroku端有一个超时,而在我的客户端有一个错误。

这一切都适用于较小的文档,但对于121页的pdf文档,只有400kb,它吹掉..

最后,我的文件被上传,所以我需要的是在发送超时响应之前,该响应将继续到我的客户端应用程序...

有什么建议?

我的错误:

1
 at=error code=H12 desc="Request timeout" method=POST path=/documents host=fierce-beach-2720.herokuapp.com fwd="81.193.155.217/bl4-155-217.dsl.telepac.pt" dyno=web.1 queue=0ms wait=0ms connect=1ms service=32272ms status=503 bytes=0

我的控制器:

1
2
3
4
5
respond_to do |format|
      if @document.save!
        format.html { redirect_to root_path, :flash => { :success =>  'Document was successfully created.'} }
        format.json { render json: @document, status: :created, location: @document}
        @document.document_process


我结束了使用延迟工作+无工作,现在我的工人dynos只在他们需要时运行。

由于heroku每个应用程序免费提供750小时免费计划,因此当您使用率较低时,您可以继续免费使用它。


建议是:使用后台进程!

我读到你想避免它,但没有办法解决它! Web应用程序中的最佳实践是尽快返回客户端,因为它释放了资源。 当你只有一个dyno在heroku运行并且你有多个请求时,它们将被阻止超时,并且没有用户能够访问你的页面。 当您拥有这样的长期流程时,您可以轻松地拒绝服务案例。

如果您因为成本而不想进行后台处理,请查看免费增值:https://github.com/phoet/freemium