0

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

4

2 回答 2

1

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

问题实际上取决于您的环境、技能、支持等。我在“现实世界”中注意到的是,如果您通过 HTTP 请求向服务器发送 >100MB 的信息,它将失败。您的客户端很可能具有非常糟糕的上传速度(大多数 soho 互联网连接下降 > 10M 但 <1M 上升),因此您最终会遇到超时(路由器/nat 表/防火墙/网络服务器/脚本)。

1) 非常大的 POST(不好的做法,可能会消耗大量内存,失败意味着您必须重新开始并使服务器对 DDoS 开放)

2) 为 Apache/nginx 使用“上传模块”(需要编译,而且设置起来通常很头疼,但效果很好,可能不适用于所有托管情况)

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

于 2015-03-30T17:30:43.310 回答
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

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

于 2015-03-30T17:26:18.150 回答