5

我正在运行一个 rails 应用程序,该应用程序具有来自用 c++ 开发的本地客户端的 json webservice 调用(具有多部分 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
4

2 回答 2

3

我已经结束了使用延迟工作+工作,现在我的工人测功机只在需要时运行。

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

于 2013-03-16T02:31:25.710 回答
1

建议是:使用后台进程!

我读到你想避免它,但没有办法绕过它!尽可能快地返回客户端是 Web 应用程序的最佳实践,因为它可以释放资源。当您在 heroku 上仅运行一个 dyno 并且您有多个请求时,它们将因您的超时而被阻止,并且没有用户能够访问您的页面。当您拥有如此长时间运行的流程时,您很容易遇到拒绝服务案例。

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

于 2013-02-21T19:12:13.210 回答