4

我想做一些我认为很简单的事情:

  • 有一个带有这些控件的表单:
    • 一个文件的文件上传
    • 复选框是否应提取此文件
    • 我将在其中指定应链接到哪个文件的文本输入(仅在选中复选框时才需要)-index_file
  • 提交表格后:
    • 如果选中该复选框,则通过 CarrierWave 将文件上传到 S3 到指定的store_dir
    • 如果选中该复选框则从存档中提取所有文件(我希望只有 ZIP 存档;我需要保留目录结构),将提取的文件上传到指定的store_dir并设置index_filein 数据库(我不需要保存到数据库中的任何内容关于其他提取的文件)

正如我所发现的,由于 Heroku 的限制,这不是一件容易的事。这些文件会很大(数百个 MiB 或几个 GiB),所以如果可能的话,我不想从 S3 重新下载这个文件。

我认为使用 Delayed Job 或 Resque 可能会奏效,但我不确定该怎么做,什么是我问题的最佳解决方案。

有谁知道如何使用尽可能少的资源来解决它?如果在 Heroku 上不可行,我也可以将 CarrierWave 更改为另一个上传器(Paperclip 等)和我的托管服务提供商。

我也在考虑使用 CloudFlare,这仍然可以正常工作吗?

谢谢你的回答。

4

1 回答 1

1

根据这个 heroku 支持电子邮件,/tmp 目录的大小似乎很多。你只需要自己清理一下,这样 Heroku 作为一个平台就不是问题了。

几篇文章可以帮助您解决问题:

  1. https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Make-Carrierwave-work-on-Heroku - 它解释了如何配置您的应用程序以使用 /tmp 目录作为 CarrierWave 的缓存目录。请注意以下行:

    use Rack::Static, :urls => ['/carrierwave'], :root => 'tmp' # 添加这一行

    这指示 rack 从 /tmp 目录提供 /carrierwave/xzy (用于临时存储图像)

  2. 然后,使用uploader.cache!方法,可以故意缓存入站上传的文件。存储后,您可以进行检查以确定是否调用uploader.store!将内容提升到 S3 的方法(假设您将 S3 配置为 CarrierWave 的存储。
于 2012-08-15T02:02:22.403 回答