ruby on rails-如何增加Heroku 30s h12超时



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

我已经在Heroku上读到了关于路由网格的文档,提到了http连接的30秒Heroku限制,以及关于长轮询的替代方案,提到了worker dynos。

在通话过程中,我会处理pdf文档并在其中插入签名。该pdf文档可以是100kb或11Mb(或更多)。

我知道我最终将不得不在后台过程中执行此操作,但我希望在绝对必要之前避免执行此操作。

你知道有什么方法可以增加超时时间吗?

正如你在下面的代码中看到的,我在文档保存后处理它(我在after_save中这样做,但改为控制器,希望在处理之前发送响应)。

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

这一切都适用于较小的文档,但对于一个只有400kb的121页pdf文档,它会爆炸。

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

有什么建议吗?

我的错误:

 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

我的控制器:

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上运行,并且你有多个请求时,它们会因为你的超时而被阻止,并且没有用户能够访问你的页面。当您有这样长时间运行的进程时,很容易出现拒绝服务的情况。

如果您因为成本原因不想进行后台流程,请查看freemium:https://github.com/phoet/freemium

相关内容

  • 没有找到相关文章

最新更新