我正在使用Paperclip为支持图片上传的移动应用构建API。 Paperclip设置为S3存储,工作正常。
我想使用延迟作业在后台从服务器上传到S3(应用程序将托管在Heroku上)。
尝试@ user.delay.photo = File.open(...)之类的内容,结果是延迟作业错误
UPDATE "delayed_jobs" SET "last_error" = '{uninitialized stream
如何进行后台上传?
答案 0 :(得分:2)
问题是IO对象无法编组并轻松检索回来。
使用.delay
方法,它会尝试将对象转储到数据库记录中,并在处理作业时将其拉回。这样做会使记录变得庞大而脆弱。
如果您在工作中有很多事情要做,请更好地使用custom job。
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目录并从作业引用来完成。最后在工作完成时进行清理。
或者,您可以尝试这个宝石:delayed_paperclip,这样更方便。