我有一个 Rails Web 应用程序,允许用户上传视频,视频存储在 NFS 安装的目录中。
当前的设置适用于较小的文件,但我也需要支持大文件上传(最多 4GB)。当我尝试上传 4GB 文件时,它最终会发生,但从用户体验的角度来看很糟糕:上传开始并根据 XHR“进度”事件显示进度,但在 100% 后,仍然需要等待很长时间(5 分钟以上) )在服务器响应请求之前。
最初我认为这与将文件从某个临时目录复制到最终的 NFS 安装目录有关。但现在我不太确定了。在我的路由中添加日志记录后,我发现文件上传进度达到 100% 和控制器操作中的代码运行之间大约有 3 分钟的等待时间(在我进行任何将文件移动到 NAS 的处理之前) 。
我想知道以下问题:
- 上传完成后、调用我的操作之前的这 3 分钟等待期间发生了什么?
- 有没有办法让我解释这段时间发生的事情,以便客户端在上传完成后立即得到响应,这样他们就不会超时?
- Rails 中通常如何处理大文件上传?这似乎是一个常见问题,但我似乎找不到任何相关内容。
(注意:当我发现这个问题时,我最初使用 CarrierWave 进行上传。我删除了它并直接在模型中使用 FileUtils 处理文件保存,只是为了确保等待时间不是由 CarrierWave 魔法背后发生的结果造成的。场景,但得到完全相同的结果。)
红宝石-v:1.9.3p362
导轨-v:3.2.11
您可能会考虑使用迷你分析器 https://github.com/SamSaffron/MiniProfiler更好地了解时间都花在哪里了。
大文件上传需要在后台处理。任何控制器或数据库访问都应该简单地标记文件已上传,然后对后台处理作业进行排队以移动它,以及可能需要发生的任何其他操作。
http://mattgrande.com/2009/08/11/delayedjob/ http://mattgrande.com/2009/08/11/delayedjob/
那篇文章的要点是,每个实现都会有所不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)