概述:
我有一个照相亭,可以拍照并将它们发送到我的网络应用程序。然后我的网络应用程序存储用户数据并将图片发送到用户 facebook 个人资料/粉丝页面。
我的网络应用程序运行Ruby on Rails @ Heroku Cedar 堆栈。
流动:
- 我的 web 应用程序通过 POST(如 web 表单)从 photobooth 接收照片。
- 展位等待服务器响应。如果上传失败,它会再次发送图片。
- 只有在 Facebook 上传完成后才会触发来自 webapp 的响应。
问题:
Webapp 仅在所有处理完成后才将数据发送到 photobooth。很多时候这将在 30 秒后发生。这会导致 Heroku 触发 H12 - Timeout。
解决方案?
在上传文件时保持请求处于活动状态(返回一些响应数据以防止 heroku 触发 H12 - https://devcenter.heroku.com/articles/http-routing#timeouts)。- 可能吗?如何在 Ruby 中实现这一点?
更改为 Unicorn + Nginx并激活 Upload Module(这样 dyno 仅在上传完成后接收请求 - Unicorn + Rails + Large Uploads)。真的有可能吗?
使用 rack-timeout gem。这会使我的很多直通上传失败,所以这些照片永远不会发布在 Facebook 上,对吧?
改变架构。直接上传到 S3,旋转一个工作人员来检查上传到 S3 存储桶的新图片,下载它们并将它们发送到 Facebook。-这个可能是最好的,但需要很多时间和精力。从长远来看,我可能会这样做,但我现在正在寻找一个快速的解决方案。
其他...