代码之家  ›  专栏  ›  技术社区  ›  Lee McAlilly

如何使用Sidekiq将文件上传到后台?

  •  4
  • Lee McAlilly  · 技术社区  · 11 年前

    我正在开发一个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

    我的上传程序(使用carrierwave和carrierwive_direct到s3): https://gist.github.com/leemcalilly/5001601

    该代码可以上传到s3,但在上传文件时,浏览器被束缚在Rails进程中。我更愿意把它转移到后台处理。我认为那里的sidekiq代码实际上来自处理图像处理的Railscast,但我不太明白为什么图像处理在那个Railscast中工作。

    我们非常感谢您为我们指明正确的方向所提供的任何帮助。

    1 回复  |  直到 11 年前
        1
  •  3
  •   Henley Wing Chiu    11 年前

    TrackUploader类基本上需要一个带参数的“perform”方法。在这种方法中,输入上传图像的逻辑。

    您还需要指定队列的名称(即track_uploader)

    之后,您可以通过TrackUploader.perform_async(参数)将项目添加到此工作队列。

    您可以手动启动sidekiq,也可以使用God来确保它保持活力。

    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