我正在使用 Paperclip 为支持图像上传的移动应用程序构建 API。回形针设置了 S3 存储并且工作正常。
我想使用延迟作业在后台从服务器上传到 S3(该应用程序将托管在 Heroku 上)。
尝试诸如@user.delay.photo = File.open(...) 之类的东西,结果是延迟作业的错误
UPDATE "delayed_jobs" SET "last_error" = '{uninitialized stream
如何进行后台上传?
我正在使用 Paperclip 为支持图像上传的移动应用程序构建 API。回形针设置了 S3 存储并且工作正常。
我想使用延迟作业在后台从服务器上传到 S3(该应用程序将托管在 Heroku 上)。
尝试诸如@user.delay.photo = File.open(...) 之类的东西,结果是延迟作业的错误
UPDATE "delayed_jobs" SET "last_error" = '{uninitialized stream
如何进行后台上传?
问题是 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_paperclip,它更方便。