我正在使用carrierwave上传视频文件并使用Transloadit对视频进行编码。在延迟作业的rails中执行此操作的最佳方法是什么。请建议。
答案 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
我的示例可能有不正确的语法,但主要的想法是您通过控制器上传视频,然后运行后台处理作业。