3

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

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

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

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

4

3 回答 3

2

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

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

于 2016-08-13T00:59:02.450 回答
1

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

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

于 2012-10-24T21:30:19.667 回答
0

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

于 2012-10-24T21:26:01.333 回答