【问题标题】:How to upload files in the background using rails carrierwave?如何使用railscarrierwave在后台上传文件?
【发布时间】:2018-04-08 20:42:42
【问题描述】:

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

【问题讨论】:

  • 你用什么做后台作业? sidekiq ?
  • 是的,sidekiqcarrierwave_backgrounder

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


【解决方案1】:

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

gem carrierwave_backgrounder 添加到您的Gemfile 并捆绑它

添加一个初始化文件config/initializers/carrierwave_backgrounder.rb 来配置您的后台处理器。如果您使用的是 sidekiq,则会出现这样的情况

CarrierWave::Backgrounder.configure do |c|
  c.backend :sidekiq, queue: :carrierwave
end

然后,将它与您的载波上传器一起用于您的模型

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

重要! 您应该在config/sidekiq.yml 中定义:carrierwave 队列

:queues:
  - [carrierwave, 1]
  - default

Sidekiq Queues Configuration

【讨论】:

  • 我试过这个,但sidekiq 没有处理这个工作。相反,它只是正常上传......我确实有redissidekiq 正在运行。 @sa77
  • @Corey 你应该在config/sidekiq.yml中定义:carrierwave队列
  • 据我所见,carrierwave_backgrounder 让您可以在后台处理图像 - 即创建缩略图、调整大小等。实际上传仍然发生在网络资源上。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-01-26
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多