【问题标题】:How to increase Heroku 30s h12 timeout如何增加 Heroku 30s h12 超时
【发布时间】:2013-02-07 04:55:55
【问题描述】:

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

我已经在 Heroku 文档中阅读了有关 routing mesh 的信息,其中提到了 http 连接的 30 秒 Heroku 限制,以及有关 long polling 替代方案的信息,指的是 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

【问题讨论】:

    标签: ruby-on-rails heroku timeout


    【解决方案1】:

    我已经停止使用delayed job + workless,现在我的工人测功机只在需要时运行。

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

    【讨论】:

    • 我可以通过 Experiment.delay.destroy_all(:user_id=>nil) 来使用它吗?而已?还是我也必须添加一个工人测功机?我怎么知道工作已经完成?
    【解决方案2】:

    建议是:使用后台进程!

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

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

    【讨论】:

    • 谢谢@phoet,成本实际上是避免工人的主要原因,因为我正在运行 heroku 免费版,并且仍处于暂存阶段,所以我将避免“有形”成本在我们获得概念验证之前,我也需要很多。我会看看免费增值服务
    • 嗨@phoet,我试图了解免费增值解决方案的完整逐步安装过程,但我没有到达那里。我只需要运行你在 github 中的设置命令吗?
    • 你认为我们可以构建一个类似的解决延迟作业的解决方案吗?
    • 当然,这也适用于延迟作业。哪一部分难以理解?
    • 我现在推迟了工作(我安装了 gems,并在 heroku 上进行了配置),但我真的不知道接下来应该做什么。我应该创建一个新的 heroku 应用程序吗?然后呢?
    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 2016-10-28
    • 2012-06-14
    • 1970-01-01
    相关资源
    最近更新 更多