我有一个关于托管大型动态生成资产和Heroku的问题。
我的应用程序将提供其基础数据子集的批量下载,其中包括每 24 小时生成一次的大文件 (>100 MB)。如果我在服务器上运行,我只需将文件写入公共目录。
但据我了解,这对于 Heroku 是不可能的。可以写入 /tmp 目录,但文件的保证生命周期似乎是根据一个请求-响应周期而不是后台作业来定义的。
我想使用 S3 来托管下载文件。S3 gem确实支持流式上传,但仅适用于本地文件系统上已存在的文件。看起来需要预先知道内容大小,这在我的情况下是不可能的。
所以这看起来像一个catch-22。我试图避免在上传到 S3 时在内存中创建一个巨大的字符串,但 S3 仅支持本地文件系统上已经存在的文件的流式上传。
给定一个我无法写入本地文件系统的 Rails 应用程序,我如何在不在内存中创建大字符串的情况下提供每天生成的大文件?