关于ruby on rails:Heroku:在没有本地文件系统的情况下服务大型动态生成的资产

Heroku: Serving Large Dynamically-Generated Assets Without a Local Filesystem

我对托管大型动态生成的资产和Heroku有疑问。

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

但是据我了解,Heroku无法做到这一点。可以写入/ tmp目录,但是那里的文件保证期限似乎是根据一个请求-响应周期而不是后台作业来定义的。

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

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

给出一个我无法在其中写入本地文件系统的Rails应用程序,如何处理每天生成的大文件而不在内存中创建大字符串?


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

实际上,文件将持续更长的时间,我们不能保证可用性的原因是tmp不会在服务器之间共享,并且每个作业/进程都可以基于云负载在不同的服务器上运行。完成工作后,还需要确保删除文件。

-另一位Heroku员工


丰富,

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

-布雷克·梅泽兰尼(Heroku)