RAILS上传大文件的最佳方式是> 2 GB

时间:2015-03-30 17:11:58

标签: ruby-on-rails carrierwave transloadit

我正在使用carrierwave上传视频文件并使用Transloadit对视频进行编码。在延迟作业的rails中执行此操作的最佳方法是什么。请建议。

2 个答案:

答案 0 :(得分:1)

有很多选项(纯粹是HTTP方面的东西,甚至没有谈论编程语言)。

问题实际上取决于您的环境,技能,支持等。我在“现实世界”中注意到了什么。如果您通过HTTP请求向服务器发送> 100MB,它将失败。您的客户很可能上传速度非常差(大多数SOHO互联网连接都低于10M但是低于1M),因此您最终会达到超时(路由器/ nat表/防火墙/ Web服务器/脚本)。 / p>

1)真的很大的POST(糟糕的做法,可能会消耗大量的内存,失败意味着你必须从头开始并让你的服务器对DDoS开放)

2)使用'上传模块'对于Apache / nginx(需要编译并且通常很难让它设置但是它运行良好,可能不适用于所有托管情况)

3)在客户端和服务器脚本中流式传输。效果很好。我还建议将上传内容分块为< 10MB,当它们失败时,重启块的可能性。

答案 1 :(得分:0)

我对DJ没有太多经验,但背景处理与所有工具的方法类似。

首先,您应该将文件上传到某处(文件系统,Amazon S3,等等)。 DJ不会处理这个任务。您应该在控制器操作中执行此操作。

然后,在上传后,您可以创建DJ任务,对您的视频进行编码并执行其他相关任务。

例如,您可以在视频模型中提交后运行DJ,例如

class Video < AR::Base
  after_commit :encode_in_background

  private

  def encode_in_background
    self.delay.encode(id)
  end

  def encode
    # code that runs in background
  end
end

我的示例可能有不正确的语法,但主要的想法是您通过控制器上传视频,然后运行后台处理作业。