我有一个使用rails 3.2的应用程序,在heroku上运行并存储在S3上。用户可以选择上传使用carrierwave / MiniMagick处理各种尺寸的照片。
我们看到的问题是,有30%的时间浏览器超时。上传代码(最多可以上传四张图片)如下所示:我使用carrierwave_backgrounder来延迟图像操作,但我们仍然有超时。这是相当小的图像 - 通常是150KB的PNG。
mount_uploader :image1, ImageUploader
process_in_background :image1
mount_uploader :image2, ImageUploader
process_in_background :image2
mount_uploader :image3, ImageUploader
process_in_background :image3
mount_uploader :image4, ImageUploader
process_in_background :image4
这是我们看到的错误
app[web.1]: Started POST "/offices" for 197.16.140.27 at 2013-05-23 23:32:18 +0000
app[web.1]: E, [2013-05-23T23:32:49.042937 #2] ERROR -- : worker=0 PID:10 timeout (31s > 30s), killing
同样的事情发生在瘦身和独角兽身上。
我所做的阅读表明我应该直接上传到S3,但随后图像操作被延迟,这对我来说是一个问题(延迟/复杂性)。我应该做些什么呢?
答案 0 :(得分:2)
John是正确的:当您直接上传到heroku时会发生这种情况。我写了一些处理heroku上传的策略here。
答案 1 :(得分:1)
这是上传的常见问题,只能通过直接上传到S3并在完成后执行处理来解决。您遇到的问题是用户连接速度,如果来自手机,那么与从快速互联网上的某人上传的同一文件相比,它需要花费30多秒的时间。你根本没有做错任何事情,我担心不同的服务器也无济于事。