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

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

该代码可以上传到 s3,但在文件上传时,浏览器会绑定在 Rails 进程中。我更愿意将其移至后台进程。我认为那里的sidekiq 代码确实来自处理图像处理的Railscast,但我不太明白为什么图像处理在该Railscast 中工作。

非常感谢任何指向正确方向的帮助。

4

1 回答 1

3

您的 TrackUploader 类基本上需要一个带有参数的“执行”方法。在该方法中,输入上传图像的逻辑。

您还需要指定队列的名称(即 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 回答