加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在Heroku上传大文件(特别是视频)

发布时间:2020-12-17 03:36:06 所属栏目:百科 来源:网络整理
导读:我正在使用heroku来托管一个主要关注托管视频的Web应用程序.这些视频是通过 vimeo pro托管的,我使用 vimeo gem by matthooks来帮助处理上传过程.上传适用于小文件,但不适用于较大的文件(例如~50mb). 看看heroku日志显示我收到http错误413,它代表“Request En
我正在使用heroku来托管一个主要关注托管视频的Web应用程序.这些视频是通过 vimeo pro托管的,我使用 vimeo gem by matthooks来帮助处理上传过程.上传适用于小文件,但不适用于较大的文件(例如~50mb).

看看heroku日志显示我收到http错误413,它代表“Request Entity Too Large”.我相信这可能与heroku对文件上传的限制有关(大于30mb,according to this webpage).但问题是我能找到的关于这个主题的任何信息似乎都已过时且相互矛盾(如claims there is no size limit这样的页面).我也在heroku的网站上找不到任何关于此的内容.

我搜索了谷歌,发现了一些有些相关的页面(one和two),但没有解决方案对我有用.我发现的大多数页面都处理将大文件上传到amazon s3,这与我正在尝试的不同.

这是日志的相关输出:

2012-07-18T05:13:31+00:00 heroku[nginx]: 152.3.68.6 - - [18/Jul/2012:05:13:31 +0000]
  "POST /videos HTTP/1.1" 413 192 "http://neoteach.com/components/19" "Mozilla/5.0 
  (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1" neoteach.com

日志中没有其他错误.这是我尝试上传视频太大时出现的唯一输出.这意味着这不是超时错误或超过每个dyno分配的内存的问题.

heroku真的限制了上传大小吗?如果是这样,有没有办法改变这个限制?请注意,文件本身根本没有存储在heroku的服务器上,它们只是被传递给vimeo的服务器.

如果问题不限制上传大小,是否有人知道其他可能出错的地方?

非常感谢!

解决方法

更新:

OP在这里.我仍然不确定为什么我得到这个特殊的413错误,但我能够提出一个使用s3_swf_upload gem的解决方案.实现涉及闪存,这是不太理想的,但它是我能够工作的唯一解决方案(我尝试过3或4).

正如Neil指出的那样(感谢Neil!),我应该得到的错误是“H12 – 请求超时”.经过反复试验,我最终遇到了这个错误.当您尝试从控制器(使用Web dyno)将大文件上载到heroku服务器时会出现问题,因为服务器响应发布请求需要很长时间.

正确的方法是将文件直接发送到s3而不通过heroku.

以下是我的方法的高级概述:

>使用s3_swf_upload gem为s3提供直接上传表单.
>使用gem中提供的javascript回调函数检测文件上传时间.
>使用javascript,发送一条帖子消息,让您的服务器知道该文件已完成上传.
>响应javascript帖子的控制器做两件事:(a)为视频对象分配s3_key属性(在表单中作为参数提供). (b)使用delayed_job宝石启动后台任务.
>后台任务从s3检索文件.我用aws-sdk gem来完成这个,因为它已经包含在s3_swf_upload中了.请注意,这与aws-s3 gem明显不同(实际上它们彼此冲突).
>从s3检索文件后,我使用vimeo gem将其上传到vimeo(仍然在后台).

上面的实现有效,但并不完美.对于大小接近500MB的文件,您仍然会在工作人员dynos中遇到R14错误.这是因为heroku每个dyno只分配512MB内存,所以你不能一次将整个文件加载到内存中.解决这个问题的方法是在最后一步中实现某种分块,从s3中检索文件并将其逐个上传到vimeo.我还在为这部分工作,我很乐意听到你的任何建议.

希望这可能对某人有所帮助.有问题尽管问我.就像我说的,我的解决方案并不完美,所以如果你觉得它可能更好,可以自由添加你自己的答案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读