gpt4 book ai didi

ruby-on-rails - 如何在 Heroku 上上传大文件(尤其是视频)

转载 作者:行者123 更新时间:2023-12-04 04:29:31 24 4
gpt4 key购买 nike

我正在使用 heroku 来托管 Web 应用程序,主要关注托管视频。这些视频是通过 vimeo pro 托管的,我使用的是 vimeo gem by matthooks帮助处理上传过程。 上传适用于小文件,但不适用于大文件 (例如~50mb)。

查看 heroku 日志显示我收到了 http 错误 413,它代表“请求实体太大”。我相信这可能与 heroku 对文件上传的限制有关(大于 30mb, according to this webpage )。但问题是,我能找到的有关该主题的任何信息似乎都已过时且相互矛盾(例如 claims there is no size limit 的此页面)。我也无法在 heroku 的网站上找到任何关于此的信息。

我搜索了谷歌并找到了一些相关的页面( onetwo ),但没有对我有用的解决方案。我发现的大多数页面都涉及将大文件上传到亚马逊 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 的服务器上。

如果问题不在于上传大小的限制,那么有人知道还有什么可能出问题吗?

非常感谢!

最佳答案

更新:

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

正如尼尔指出的(谢谢尼尔!),我应该得到的错误是“H12 - 请求超时”。经过反复试验,我确实遇到了这个错误。当您尝试从 Controller (使用 Web dyno)将大文件上传到 heroku 服务器时,会出现问题,因为服务器响应发布请求所需的时间太长。

正确的方法是将文件直接发送到 s3 而不通过 h​​eroku。

这是我的方法的高级概述:

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

  • 上面的实现有效, 但它并不完美 .对于大小接近 500MB 的文件,您仍然会在工作程序 dynos 中遇到 R14 错误。发生这种情况是因为 heroku 只为每个 dyno 分配 512MB 的内存,因此您无法一次将整个文件加载到内存中。解决这个问题的方法是在最后一步实现某种分块,在那里您从 s3 检索文件并将其逐个上传到 vimeo。我仍在研究这部分,我很想听听您可能有的任何建议。

    希望这可以帮助某人。有问题尽管问我。就像我说的,我的解决方案并不完美,所以如果您认为它可以更好,请随时添加您自己的答案。

    关于ruby-on-rails - 如何在 Heroku 上上传大文件(尤其是视频),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11534894/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com