【问题标题】:Extracting uploaded archive to S3 with CarrierWave on Heroku在 Heroku 上使用 CarrierWave 将上传的存档提取到 S3
【发布时间】:2012-08-14 23:09:06
【问题描述】:

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

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

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

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

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

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

感谢您的回答。

【问题讨论】:

  • 嘿蒂米 - 你有没有在这方面取得任何进展?我自己也遇到了非常相似的挑战并寻求研究建议。

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


【解决方案1】:

基于this heroku support email,/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! method,可以故意缓存入站上传的文件。存储后,您可以进行检查以确定是否调用 uploader.store! method,这会将内容提升到 S3(假设您将 S3 配置为 CarrierWave 的存储。

【讨论】:

  • 谢谢帮助,我试试看。
猜你喜欢
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 2012-07-08
  • 2013-06-20
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
相关资源
最近更新 更多