4

私は、大きな音楽ファイルをアップロードできるRailsアプリに取り組んでいます。これらをバックグラウンドでアップロードして、アップロードを開始すると、ユーザーがトラック名やアーティストなどのファイルに関するメタデータを入力しているときに、sidekiqワーカーに移動されるようにします。

このrailscastをフォローして、画像処理をバックグラウンドに移動することができました: http ://railscasts.com/episodes/383-uploading-to-amazon-s3?view=asciicast

しかし、ファイルの実際のアップロードをバックグラウンドに移動する方法を完全に理解することはできません。使用すべき特定のコールバックまたはSidekiqメソッドはありますか?

このようなことを行う方法に関するリソースはありますか?

これが私の曲のモデルです: https ://gist.github.com/leemcalilly/5001583

私の曲のコントローラー: https ://gist.github.com/leemcalilly/5001590

私のアップロードフォーム: https ://gist.github.com/leemcalilly/5001586

私のアップローダー(s3へのcarrierwave_directでcarrierwaveを使用): https ://gist.github.com/leemcalilly/5001601

そのコードはs3にアップロードするために機能しますが、ファイルのアップロード中、ブラウザーはRailsプロセスで拘束されます。それをバックグラウンドプロセスに移したいと思います。そこにあるsidekiqコードは、実際には画像処理を処理するRailscastからのものだと思いますが、そのRailscastで画像処理が機能している理由はよくわかりません。

正しい方向に向けられる助けがあれば大歓迎です。

4

1 に答える 1

3

TrackUploaderクラスには、基本的に引数を取る「perform」メソッドが必要です。その方法では、画像をアップロードするロジックを入れます。

キューの名前も指定する必要があります(つまり、track_uploader)

その後、TrackUploader.perform_async(argument)を介してこのワーカーキューにアイテムを追加できます。

手動で、または神を使用してsidekiqを開始し、それが生き続けるようにすることができます。

class TrackUploader < CarrierWave::Uploader::Base

    include Sidekiq::Worker
    sidekiq_options :queue => :track_uploader

    include Sprockets::Helpers::RailsHelper
    include Sprockets::Helpers::IsolatedHelper

    include CarrierWaveDirect::Uploader

    # Recommended for use with fog
    include CarrierWave::MimeTypes
    process :set_content_type

    def extension_white_list
      %w(mp3 m4a wav aiff flac)
    end

    def perform(argument)
       #do the actual uploading here
    end

end
于 2013-02-23T03:24:14.183 に答える