如何使用rails carrierwave在后台上传文件?

时间:2017-05-02 21:12:17

标签: ruby-on-rails amazon-s3 carrierwave

我目前正在使用gem Carrierwave将文件上传到我的AWS s3帐户。但我会上传一些大文件,所以我担心服务器超时而用户不得不等待。 任何人都有任何建议将其转移到后台工作以及如何实现这一目标?我看过sidekiq,但我想找出从哪里开始。当我尝试实现它时,即使文件在Rails中取得成功,该文件也似乎无法上传。

2 个答案:

答案 0 :(得分:2)

有一个gem carrierwave_backgrounder可帮助您在后台排队文件上传

gem carrierwave_backgrounder添加到Gemfile并捆绑

添加初始化文件config/initializers/carrierwave_backgrounder.rb以配置后台处理器。如果您使用sidekiq

,这样的事情
CarrierWave::Backgrounder.configure do |c|
  c.backend :sidekiq, queue: :carrierwave
end

然后,在您的模型上使用它以及您的carrierwave上传器

class User < ActiveRecord::Base
  mount_uploader :avatar, AvatarUploader
  process_in_background :avatar
end

重要! 您应该在:carrierwave

中定义config/sidekiq.yml队列
:queues:
  - [carrierwave, 1]
  - default

Sidekiq Queues Configuration

答案 1 :(得分:1)

最好的方法是使用Carrierwave Direct,因为它完全绕过了rails服务器。然后,您可以将实际处理作为后台任务(我推荐Sidekiq,但使用您想要的任何内容。)