Heroku的超时上传大文件到S3时,大文件、上传、Heroku

2023-09-11 08:33:01 作者:踏碎星霄

我有基于RefineryCMS 1.0.8与我的应用程序的问题 部署在Heroku上。

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

的Heroku有30秒的请求超时。当需要上传文件> 4MO通过RefineryCMS管理,它有时会需要超过 30秒完成(主要是因为需要时间的要求 将文件上传到S3)。

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).

在这种情况下,测功将被冻结,并 反应迟钝约30分钟(这个时间结束时每个请求 由一个H12错误请求超时)。这种现象正是说明克里斯托的最后一条消息在this讨论

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

在此other讨论 和 Heroku的文档 :直接上传到S3是preferred方法,如果你 使用File上传大于4MB。我们的想法是要跳过的跳 你的赛道,使得直接从最终用户浏览器的连接 到S3。

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."

直接上传到S3应该是解决方案,但它看起来很困难 对我来说,与RefineryCMS /蜻蜓/雾正确实现它。我不知道是否有可能没有大的修改在论文的工具,我不知道是否有一种替代方法。

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.

感谢您的帮助

推荐答案

不是真的。 Heroku的超时是一套在石头上的事情,你需要解决。直接上传到S3是唯一的选择,带有某种上传后的处理要求。

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.

有解决方案在那里,如 CarrierWaveDirect ,但我不知道如何容易,这将是与炼油厂使用。

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