不幸的是,赏金被授予了一个答案,没有解决这个问题,对于那些有类似问题的人。Rails背景图片上传导致应用程序超时
我有一个图片上传的形式(heroku到s3)。当我提交表单时,我的rails服务器会等待上传图像的后台作业完成,然后再向用户返回响应。这会导致应用程序在每次上传图像时都会超时。
当前事件的顺序:
- 用户提交表单
- 服务器接收形式
- 如果有图像,服务器启动后台作业
- 如果后台作业已经开始,服务器等待它完成(导轨超时这里)
- 如果开始,后台作业完成
- 服务器处理
- 服务器响应于用户
事件的期望的顺序的请求:
- 用户提交形式
- Server收到形式
- Server处理的非图像字段
- 如果有图像,服务器启动后台作业
- 服务器响应用户
- 后台作业完成,服务器处理上传的图片(保存URL)
上传代码
class PhotoUploader < CarrierWave::Uploader::Base
include ::CarrierWave::Backgrounder::Delay
include CarrierWave::MimeTypes
process :set_content_type
storage :fog
end
Carrierwave ::新闻背景初始化
CarrierWave::Backgrounder.configure do |c|
c.backend :sidekiq, queue: :carrierwave
end
用户模型
class User < ActiveRecord::Base
mount_uploader :photo, PhotoUploader, delayed: true
process_in_background :photo
end
没有控制器的代码,因为表格由ActiveAdmin处理。我可以覆盖任何需要的地方,但无法弄清楚需要改变的地方。
我必须改变以获得正确的事件顺序?
原谅我,如果我完全误解了这个问题,但不会上传不是异步的,如果通过标准的HTML表单提交完成?这不需要一些JavaScript异步处理上传,像这样? https://github.com/JangoSteve/remotipart – Ben 2014-11-07 14:41:03
所有我看过的异步图像上传的教程和资源都没有改变生成的HTML表单,只是控制器。正如我所提到的**图像上传工作正常**。处理表单的控制器不需要等待。 – MishieMoo 2014-11-07 17:50:29
对不起,我需要看到更多的代码才能理解你如何实现这一点。 sidekiq工作人员是否将整个上传处理为S3或者在上载完成时处于排队状态以处理数据库更新?你的控制器看起来像什么来响应表单提交? – Ben 2014-11-07 18:18:37