4

我正在開發一個Rails應用程序,它允許您上傳大型音樂文件。我想在後臺上傳這些內容,這樣當你開始上傳時,它會被移動到sidekiq工作人員,同時用戶輸入關於文件的元數據,如曲目名稱和藝術家等。如何使用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

我上傳(使用carrierwave與carrierwave_direct到S3): https://gist.github.com/leemcalilly/5001601

該代碼適用於上傳廣告到s3,但瀏覽器綁定在Rails進程中,同時文件正在上傳。我寧願將其移至後臺進程。我認爲那裏的sidekiq代碼真的來自處理圖像處理的Railscast,但我不太明白爲什麼圖像處理在Railscast中工作。

任何幫助指向正確的方向非常感謝。

+0

你可以批准我的回答嗎,可以請:) – 2013-04-24 15:28:17

回答

3

你的TrackUploader類基本上需要一個帶有參數的「perform」方法。在該方法中,輸入上傳圖像的邏輯。

你需要指定隊列的名稱,以及(即track_uploader)

之後,您可以設置項目來此工作隊列通過TrackUploader.perform_async(參數)增加。

您可以手動啓動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 
+0

你是怎麼做到真正上傳的?我以爲這是自動發生的?... – Mohamad 2013-10-24 00:48:08

+1

請解釋'#在這裏實際上傳。 – rkamun1 2014-12-19 22:24:11