注意:这篇文章中有些内容不符合最佳实践。警告:)
- 我正在开发连接到微型实例 AWS 服务器的管理仪表板。
- 数据库有数千万条记录。
- 大多数查询会在几秒钟内返回,但有些查询最多需要一两分钟才能返回,具体取决于我无法控制的一些因素。
由于 Heroku 的 30 秒限制 (https://devcenter.heroku.com/articles/request-timeout),我需要找到一些方法来争取时间以保持连接打开,直到查询返回。 Heroku 确实说您可以通过同时向客户端发送字节来购买时间,这又为您购买了 55 秒。
无论如何,我很好奇你们是否有解决 Heroku 拖延时间的方法。谢谢!
最佳答案
我已经为此做了一个解决方法。我们的应用程序正在运行 Sinatra,我使用了 EventMachine gem保持每 10 秒将 \0
写入流中,这样 Heroku 在操作完成之前不会关闭连接,请参见示例 https://gist.github.com/troex/31790323fb4a8a29c8b8cd84e50ad1e8
我的示例使用的是 Puma,但它应该也适用于 Unicorn 和 Thin(Thin 不需要 EventMachine.run
)。对于 Rails,我认为您可以使用 before/after_action 来启动/停止事件计时器。
关于ruby-on-rails - Heroku 30 秒超时 w/long 外部查询的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057829/