【问题标题】:Workaround for Heroku 30 second timeout w/ long external queryHeroku 30 秒超时和长外部查询的解决方法
【发布时间】:2016-08-13 08:59:02
【问题描述】:

注意:这篇文章中有些东西不是最佳实践。被警告:)

  • 我正在开发一个连接到微实例 AWS 服务器的管理仪表板。
  • 数据库拥有数千万条记录。
  • 大多数查询会在几秒钟内返回,但有些则需要一两分钟才能返回,这取决于我无法控制的一些事情。

由于 Heroku 的 30 秒限制 (https://devcenter.heroku.com/articles/request-timeout),我需要找到一些方法来争取时间以保持连接打开,直到查询返回。 Heroku 确实说过,您可以通过同时向客户端发送字节来购买时间,这又为您购买了 55 秒。

无论如何,只是好奇你们是否有解决 Heroku 拖延时间的方法。谢谢!

【问题讨论】:

    标签: ruby-on-rails heroku


    【解决方案1】:

    我已经为此做了一个解决方法。我们的应用程序正在运行 Sinatra,我使用 EventMachine gem 每隔 10 秒将 \0 写入流中,因此 Heroku 在操作完成之前不会关闭连接,请参见示例 https://gist.github.com/troex/31790323fb4a8a29c8b8cd84e50ad1e8

    我的示例是使用 Puma,但它也应该适用于 Unicorn 和 Thin(对于 Thin,您不需要 EventMachine.run)。对于 Rails,我认为您可以使用 before/after_action 来启动/停止事件计时器。

    【讨论】:

      【解决方案2】:

      您可以将事物分解为多个查询。

      您可以发送一个查询,让您的 AWS 服务器立即响应,只是说它收到了查询,然后在提取数据后,让它通过 POST 请求将该数据发送到您的 Heroku 实例。

      【讨论】:

      • 谢谢,我会接受答案,但如果你觉得无聊,代码示例会有所帮助:)
      • 我所描述的只是一个 webhook - 请参阅 slideshare.net/progrium/using-web-hooks 的演示文稿。
      【解决方案3】:

      是的,通过 ajax 来做,发回一个回复说稍后再问...

      【讨论】:

        猜你喜欢
        • 2016-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-02
        • 1970-01-01
        • 2021-11-28
        • 2015-11-14
        相关资源
        最近更新 更多