RoR - Rails 中的大文件上传

2024-05-17

我有一个 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(使用前将#替换为@)

RoR - Rails 中的大文件上传 的相关文章

随机推荐

  • 获取 Mojave 上的鼠标坐标

    我有一个非常基本的小命令行应用程序 可以在下次单击鼠标时获取鼠标坐标 import
  • 按特定样本前缀对列名称向量进行子集化

    假设我有一个如下所示的数据框 ca01 lt c 1 10 ca02 lt c 2 11 ca03 lt c 3 12 stuff 1 lt rep test 10 other lt rep 9 10 data lt data frame
  • SQL 错误:ORA-14006:无效的分区名称

    我正在尝试使用以下 SQL 语句对 Oracle 12C R1 中的现有表进行分区 ALTER TABLE TABLE NAME MODIFY PARTITION BY RANGE DATE COLUMN NAME INTERVAL NUM
  • 在 Google App-Engine JAVA 中将文本转换为字符串,反之亦然

    如何从字符串转换为文本 java lang String to com google appengine api datastore Text 反之亦然 Check Javadoc http code google com appengin
  • grep 两个分隔符之间的子字符串

    我有很多bash使用的脚本perl内的表达式grep为了提取两个分隔符之间的子字符串 例子 echo BeginMiddleEnd grep oP lt Begin End 问题是 当我将这些脚本移植到运行的平台时busybox 融合的 g
  • 将 python 字典中的数据呈现给 django 模板。

    我有一本字典 data sok 1 10 sao 1 10 sok sao 2 20 我如何 循环字典 将我的数据作为 HTML 表呈现给 Django 模板 这种格式为表格 author qty Amount sok 1 10 sao 1
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • Magento EE FPC 中的打孔法师_目录_块_产品_价格

    我花了很长时间找出代码 参数来为Mage Catalog Block Product Price块在magento中打孔全页缓存 我可以在第一次加载页面时显示价格 但是当缓存 id 是唯一的时 它不会正确呈现价格 当它应该被缓存时 它会正确
  • 软删除与数据库存档

    建议阅读 相似的 软删除是个好主意吗 https stackoverflow com q 2549839 1026459 好文章 http weblogs asp net fbouma archive 2009 02 19 soft del
  • Angular 2 - Http - 正确忽略空结果

    我有很多处理请求并简单返回 200 的 REST 端点 我注意到将结果映射为错误json 如果我尝试不进行任何类型的映射 我会看到浏览器警告它无法解析 XML 由于不返回任何内容是很常见的 我很好奇我应该如何处理响应 这是一个基本的代码示例
  • wildfly-logstash 不将日志发送到logstash

    我正在使用 jboss keycloak 11 0 2 和 wildfly logstash https github com kifj wildfly logstash https github com kifj wildfly logs
  • 树莓派的设备树驱动内核

    我想用设备树驱动的 Linux 内核启动树莓派 有什么特别的事情要做吗 谁能指出为树莓派设置基于设备树的内核启动需要什么 我可能需要有树莓派内核源代码 其中设备驱动程序应与设备树兼容 如果是这样 我在哪里可以找到 Raspberry Pi
  • 连接被拒绝:当uwsgi和nginx在不同容器中时

    我正在尝试设置两个 docker 容器 是的 无需 docker compose 分开 一个带有 nginx 另一个带有带有基本 Flask 应用程序的 uwsgi 我在 docker 内的同一网络中运行容器我的 nginx 配置已添加 链
  • 上游太大 - nginx + codeigniter

    我从 Nginx 收到此错误 但似乎无法弄清楚 我正在使用 codeigniter 并使用数据库进行会话 所以我想知道标题怎么会太大 有没有办法检查标题是什么 或者看看我能做些什么来修复这个错误 如果您需要我提供任何conf文件或其他文件
  • 如何在 IIS 10 上禁用 HTTP/2

    IIS 10 声称完全支持 HTTP 2 我想知道是否有办法在 IIS 10 上关闭 HTTP 2 要在 Windows 10 HTTP SYS 上禁用 HTTP 2 请在 Windows 10 桌面上的 HKEY LOCAL MACHIN
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • string.Compare 行为

    怎么会这样呢 这是从VS2008中的立即窗口获取的 string Compare 1 string Compare 0 0 1 从言论来看字符串比较 http msdn microsoft com en us library 84787k2
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 元素和 svg 形状之间的白线

    大家好 我正在使用由 shapedivider 生成的 svg 整形器 您可以看到 有一条白线 我不知道为什么它在那里以及如何删除它 请你帮助我好吗 有形状分隔符的代码 custom shape divider bottom 1640714
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开