2

我正在使用 Paperclip 为支持图像上传的移动应用程序构建 API。回形针设置了 S3 存储并且工作正常。

我想使用延迟作业在后台从服务器上传到 S3(该应用程序将托管在 Heroku 上)。

尝试诸如@user.delay.photo = File.open(...) 之类的东西,结果是延迟作业的错误

UPDATE "delayed_jobs" SET "last_error" = '{uninitialized stream

如何进行后台上传?

4

1 回答 1

2

问题是 IO 对象不能被编组并轻松检索回来。

使用.delay方法,它尝试将对象转储到数据库记录中,并在处理作业时将其拉回。这样做,使唱片又大又脆。

如果您在工作中有很多事情要做,最好使用自定义工作。

class UploadJob < Struct.new(:user_id)
  def perform
    user = User.find(user_id)
    user.photo = File.open(.....)
  end
end

Delayed::Job.enqueue UploadJob.new(@user.id)

您可以通过将图像写入项目中的 tmp 目录并从作业中引用来自己完成。最后在工作完成后进行清理。

或者,您可以试试这个 gem:delayed_pa​​perclip,它更方便。

于 2012-05-28T15:32:55.060 回答