9

我有一个关于托管大型动态生成资产和Heroku的问题。

我的应用程序将提供其基础数据子集的批量下载,其中包括每 24 小时生成一次的大文件 (>100 MB)。如果我在服务器上运行,我只需将文件写入公共目录。

但据我了解,这对于 Heroku 是不可能的。可以写入 /tmp 目录,但文件的保证生命周期似乎是根据一个请求-响应周期而不是后台作业来定义的。

我想使用 S3 来托管下载文件。S3 gem确实支持流式上传,但仅适用于本地文件系统上已存在的文件。看起来需要预先知道内容大小,这在我的情况下是不可能的。

所以这看起来像一个catch-22。我试图避免在上传到 S3 时在内存中创建一个巨大的字符串,但 S3 仅支持本地文件系统上已经存在的文件的流式上传。

给定一个我无法写入本地文件系统的 Rails 应用程序,我如何在不在内存中创建大字符串的情况下提供每天生成的大文件?

4

2 回答 2

10

${RAILS_ROOT}/tmp(不是 /tmp,它在您的应用程序目录中)在您的过程中持续存在。如果您正在运行后台 DJ,则 TMP 中的文件将在该过程中持续存在。

实际上,这些文件会持续更长时间,我们说您不能保证可用性的原因是 tmp 不是跨服务器共享的,并且每个作业/进程可以根据云负载在不同的服务器上运行。作为工作的一部分,您还需要确保在完成文件后删除它们。

- 另一位 Heroku 员工

于 2009-10-26T19:09:16.147 回答
3

富有的,

您是否尝试过将文件写入 ./tmp 然后将文件流式传输到 S3?

-布莱克·米泽拉尼(Heroku)

于 2009-10-26T18:29:36.833 回答