我在我的RoR项目上有一个动作,它生成一个包含动态数据的大型zip,它需要超过heroku允许的30秒。 如果我将数据发送回客户端,Heroku允许请求持续时间超过30秒,因此:
我的代码:
send_data(zip(@data), :filename => "name.zip", :type=>"application/zip")
答案 0 :(得分:1)
有几种方法可以避免可怕的Heroku H12 request timeout error.
有几种方法可以做到这一点。
slacker方法是发回空格让Heroku知道你还活着并发送数据。您需要修改代码以便每隔一段时间写一个空格,但这足以使Heroku不再超时,但也不会在以后干扰数据。您需要正确设置标题,因为在线路上发送数据后无法修改标题。
您可以每隔几秒钟进行一次客户端轮询(我强烈建议几乎所有轮询的指数退避)。您需要创建一个新的端点,如/status
,webapp可以请求。但是,这意味着当原始压缩文件请求完成时,服务器无法与客户端进行通信,因为连接早已被终止。因此,您将文件上传到s3,然后当客户端请求/ status时,检查文件是否已上传到s3然后返回URL。
如果您担心如何在S3上管理空间,我建议您查看S3 object expiration,它将在一定的生命周期后自动删除文件。