Heroku timeout when uploading big file to s3

一笑奈何 提交于 2019-12-20 20:26:15

问题


I got a problem with my application based on RefineryCMS 1.0.8 deployed on heroku.

Heroku have a request timeout of 30 seconds. When uploading a file > 4MO through the RefineryCMS admin, it will sometimes take more than 30 seconds to perform the request (mostly because of the time needed to upload the file to s3).

In this case, the dyno will be "frozen" and unresponsive for around 30 minutes (every request during this time end up by a H12 Error request timeout). This behaviour is exactly what describe christos in the last message in this discussion

From this other discussion and the heroku documentation : "Direct Upload to S3 is the preferred approach if you’re working with file uploads bigger than 4MB. The idea is to skip the hop to your dyno, making a connection from the end user browser directly to S3."

The direct upload to S3 should be the solution but it looks difficult for me to implement it properly with RefineryCMS / Dragonfly / Fog. I'm not sure if it's possible without big modification in theses tools and I'm wondering if there is an alternative.

Thanks for your help


回答1:


Not really. The Heroku timeout is a set in stone thing that you need to work around. Direct upload to S3 is the only option, with some sort of post-upload processing required.

There are solutions out there such as CarrierWaveDirect, but I don't know how easy this would be to use with Refinery.




回答2:


You could try to add unicorn to your application.

config/unicorn.rb

worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)

timeout 180 # << Unicorn Timeout will allow a longer upload time.

preload_app true

before_fork do |server, worker|

https://devcenter.heroku.com/articles/rails-unicorn



来源:https://stackoverflow.com/questions/7854239/heroku-timeout-when-uploading-big-file-to-s3

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!