2

5 MB を超えるビデオ ファイルをサーバーに保存するとします。このファイルを保存するためのバックグラウンド ジョブを作成する必要がありますか?

これはどのように行うべきですか?ビデオ モデルには、タイトル、説明、および添付列/フィールドがあります。全て必須項目です。

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

ユーザーにUnencodedVideoをアップロードしてもらいます。次に、createメソッドで、ビデオをエンコードするジョブを開始し(resque / delaydjobsを使用)、ビデオを作成します。

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 に答える