如何在Heroku上生成文件并进行压缩?

5

我想要做的事情是与此相反。

我希望的是不解压缩并将集合文件添加到S3,而是:

当用户请求时:

  1. 生成一堆xml文件
  2. 将xml文件与一些图片(预先存储在S3上的图片)打包成zip文件
  3. 下载zip文件

有人知道如何做到这一点吗?我认为在普通计算机上我可以轻松完成这个任务,但Heroku会让事情变得更复杂,因为它有一个只读文件系统。

1个回答

4
从heroku关于只读文件系统的文档中可以了解到:

有两个目录是可写的:./tmp 和 ./log(在您的应用程序根目录下)。如果您希望在请求期间暂时放置文件,则可以将其写入像#{RAILS_ROOT}/tmp/myfile_#{Process.pid}这样的文件名。不能保证此文件会出现在后续请求中(尽管可能会出现),因此不应将其用于任何类型的永久存储。

您应该能够很容易地将生成的xml文件写入tmp/并跟踪名称,下载并将s3文件写入同一目录,并(也许?)调用zip命令,只要输出位于tmp/中,然后使用正确的mime类型将文件提供给浏览器以提示下载。我只关心文件大小以及heroku是否有限制tmp目录中允许的内容的未记录限制。特别是您仅在单个请求的持续时间内执行此操作,我认为您有很好的机会能够做到这一点。

编辑:稍微查看一下,你可能可以使用类似RubyZip的东西来创建zip文件,如果你想避免调用系统命令。


好的,Brett,听起来很不错。首先,我认为我们只需要在请求期间使用zip文件。如果需要更长时间,我们可以将其移到S3上...是的,这听起来可行。干杯! - digitalWestie
rubyzip在创建与Windows兼容的zip文件方面存在问题。rubyzip2也存在相同的问题,zip gem也是如此。 - Zach Dennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接