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

내 업 로더 (S3하는 carrierwave_direct에 사용 carrierwave) : https://gist.github.com/leemcalilly/5001601

여기에 내 노래 모델입니다

그 코드는 uplo에 작동합니다. 광고를 s3으로 보내지 만 브라우저가 파일을 업로드하는 동안 Rails 프로세스에 묶여 있습니다. 나는 그것을 배경 과정으로 옮기고 싶다. 거기에있는 사이드 키 코드는 이미지 처리를 다루는 Railscast에서 나온 것이지만, 이미지 처리가 왜 Railscast에서 작동하는지 이해하지 못합니다.

올바른 방향으로 지적하는 데 큰 도움이됩니다.

+0

내 대답을 승인해도 괜찮을까요? –

답변

3

TrackUploader 클래스에는 기본적으로 인수를 취하는 "수행"메서드가 필요합니다. 그 방법으로, 이미지를 업로드하기위한 논리를 넣으십시오.

당신은

나중에 당신이 TrackUploader.perform_async (인수)를 통해이 작업자 큐에 항목을 추가 할 수 있습니다뿐만 아니라 (즉 track_uploader) 큐의 이름을 지정해야합니다.

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

+1

'# 여기에 실제 업로드하는 것을 '설명해주십시오. – rkamun1