超时使用Heroku rails应用程序并在S3上存储

时间:2013-05-24 00:02:55

标签: ruby-on-rails heroku amazon-s3 carrierwave

我有一个使用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,但随后图像操作被延迟,这对我来说是一个问题(延迟/复杂性)。我应该做些什么呢?

2 个答案:

答案 0 :(得分:2)

John是正确的:当您直接上传到heroku时会发生这种情况。我写了一些处理heroku上传的策略here

答案 1 :(得分:1)

这是上传的常见问题,只能通过直接上传到S3并在完成后执行处理来解决。您遇到的问题是用户连接速度,如果来自手机,那么与从快速互联网上的某人上传的同一文件相比,它需要花费30多秒的时间。你根本没有做错任何事情,我担心不同的服务器也无济于事。