【问题标题】:Heroku: Serving Large Dynamically-Generated Assets Without a Local FilesystemHeroku:在没有本地文件系统的情况下为大型动态生成的资产提供服务
【发布时间】:2010-12-10 04:51:16
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails streaming amazon-s3 heroku


    【解决方案1】:

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

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

    -另一个 Heroku 员工

    【讨论】:

      【解决方案2】:

      丰富,

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

      -Blake Mizerany (Heroku)

      【讨论】:

      • @Blake,我没有尝试过,因为 /tmp 目录(上面链接)上的 Heroku 文档说(据我所知)该目录的内容将在一个持续时间内存在要求。我要做的是在后台工作的背景下,这似乎是自找麻烦。如果我错了,那就太好了 - 这会解决问题。
      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 2017-01-14
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多