2

如果我将大于 5mb 的视频文件保存到服务器上。我应该创建一个后台作业来保存这个文件吗?

这应该怎么做?我的视频模型有标题、描述和附件列/字段。各个领域都需要。

在 def create 中,我不应该做"if @video.save",而应该做类似"if Resque.enqueue(Save, @video)" 的事情

我不确定如何做到这一点,因为将参数传递给 Resque.enqueue() 会将其转换为哈希。其次,使用 " "if Resque.enqueue(Save, @video)" ",期望 true 或 false。然而,Resque.enqueue 不能返回任何东西。还是我错了?

按钮线是。使用 resque + redis 的后台工作人员保存记录的适当方法是什么?

理想情况下,我认为它应该类似于:

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

你怎么认为?

4

2 回答 2

1

再次认清形势。我不认为上传者意味着要延迟工作..考虑一下。如果上传文件排在第 10 位会发生什么情况。它期望从哪里获取文件?

正如另一位开发人员所引用的那样:“有 HTTP 请求处理程序,只有后台进程。您需要在 http 请求处理程序中处理原始上传,然后您可以启动外部后台进程以将其从本地磁盘上传到 S3”。

这意味着,最初运行一些 HTTP 请求处理程序来处理这些类型的请求是正常的。

希望这能为最终遇到同样问题的用户解决一些问题。

于 2011-02-15T10:46:01.153 回答
0

我会让用户上传一个未编码的视频。然后,在它的 create 方法上,它启动一个对视频进行编码的作业(使用 resque/delayedjobs),这将创建一个 Video。

class UnencodedVideo
  def after_create
    Resque.enqueue(Encoder, this.id)
  end
end

class Encoder
  def self.perform(unencoded_video_id)
    unencoded_video = UnencodedVideo.find(unencoded_video_id)
    ...
    video.save
  end
end

class Video
end
于 2011-02-14T13:48:46.877 回答