如何发送超过heroku 30秒限制的动态生成的文件

时间:2014-11-21 01:25:36

标签: jquery ruby-on-rails heroku

我在我的RoR项目上有一个动作,它生成一个包含动态数据的大型zip,它需要超过heroku允许的30秒。 如果我将数据发送回客户端,Heroku允许请求持续时间超过30秒,因此:

  1. 我在处理服务器上的数据时如何解决这个问题(我想某种jquery轮询)?
  2. 或者我应该使用延迟作业将文件临时存储在S3上并传递URL?对于一次使用的文件是否值得?
  3. 我的代码:

    send_data(zip(@data), :filename => "name.zip", :type=>"application/zip")
    

1 个答案:

答案 0 :(得分:1)

有几种方法可以避免可怕的Heroku H12 request timeout error.

有几种方法可以做到这一点。

  1. slacker方法是发回空格让Heroku知道你还活着并发送数据。您需要修改代码以便每隔一段时间写一个空格,但这足以使Heroku不再超时,但也不会在以后干扰数据。您需要正确设置标题,因为在线路上发送数据后无法修改标题。

  2. 您可以每隔几秒钟进行一次客户端轮询(我强烈建议几乎所有轮询的指数退避)。您需要创建一个新的端点,如/status,webapp可以请求。但是,这意味着当原始压缩文件请求完成时,服务器无法与客户端进行通信,因为连接早已被终止。因此,您将文件上传到s3,然后当客户端请求/ status时,检查文件是否已上传到s3然后返回URL。

  3. 如果您担心如何在S3上管理空间,我建议您查看S3 object expiration,它将在一定的生命周期后自动删除文件。