如果我将一个大于 5mb 的视频文件保存到服务器上。我应该创建一个后台作业来保存这个文件吗?
这应该怎么做?我的视频模型有标题、描述和附件列/字段。所有字段都是必需的。
在 def create 中,我应该做类似"if Resque.enqueue(Save, @video)" 的操作,而不是执行"if @video.save"?
我不确定如何做到这一点,因为将参数传递给 Resque.enqueue() 会将其转换为散列。其次,对于“”if Resque.enqueue(Save, @video)“”,需要一个 true 或 false。然而,Resque.enqueue 不能返回任何东西。还是我错了?
按钮线是。使用带有 resque + redis 的后台 worker 保存记录的合适方法是什么?
理想情况下,我认为它应该类似于:
def create
@video = Video.new(params[:video])
respond_to do |format|
if Resque.enqueue(Save)
...
end
end
module Save
@queue = :save
def self.perform
video = Video.new(params[:video])
video.save
return true
end
end
你有什么想法?
最佳答案
再次意识到情况。我不认为上传者意味着延迟工作……想想看。如果上传文件排在第 10 个位置会发生什么。它期望从哪里获取文件?
正如另一位开发者所说:“有 HTTP 请求处理程序和后台进程。您需要在 http 请求处理程序中处理原始上传,然后您可以启动外部后台进程将其从本地上传到 S3磁盘”。
这意味着,最初运行一些 HTTP 请求处理程序来处理这些类型的请求是正常的。
希望这能为最终遇到同样问题的用户解决一些问题。
关于ruby-on-rails - 如何使用后台 worker 保存记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4990708/