使用rest-client 将文件下载到磁盘,而不先将其全部加载到内存中

2024-04-09

我正在使用 Rest-client 下载大页面(大小约为 1.5 GB)。检索到的值存储在内存中,而不是保存到文件中。结果我的程序崩溃了failed to allocate memory (NoMemoryError).

但没有必要将这些数据保存在内存中,甚至可以直接保存到磁盘中。

我发现“您可以:(...)手动处理响应(例如,将其作为流进行操作,而不是将其全部读入内存)有关更多信息,请参阅 RestClient::Request 的文档。”在https://github.com/rest-client/rest-client https://github.com/rest-client/rest-client遗憾的是读完之后http://www.rubydoc.info/gems/rest-client/1.7.3/RestClient/Request http://www.rubydoc.info/gems/rest-client/1.7.3/RestClient/Request我不知道如何实现它。

我也知道我可能会使用其他库(使用 WWW:Mechanize 将文件下载到磁盘,而不先将其全部加载到内存中 https://stackoverflow.com/questions/4360043/using-wwwmechanize-to-download-a-file-to-disk-without-loading-it-all-in-memory)但我的程序已经在使用rest-client。

简化代码:

data = RestClient::Request.execute(:method => :get, :url => url, :timeout => 3600)
file = File.new(filename, 'w')
file.write data
file.close

Code - https://github.com/mkoniecz/CartoCSSHelper/blob/395deab626209bcdafd675c2d8e08d0e3dd0c7f9/downloader.rb#L126 https://github.com/mkoniecz/CartoCSSHelper/blob/395deab626209bcdafd675c2d8e08d0e3dd0c7f9/downloader.rb#L126


另一种方法是使用raw_response。这会直接保存到文件中,通常在/tmp并毫无问题地处理重定向。 看流式响应 https://github.com/rest-client/rest-client#streaming-responses。这是他们的例子:

>> raw = RestClient::Request.execute(
           method: :get,
           url: 'http://releases.ubuntu.com/16.04.2/ubuntu-16.04.2-desktop-amd64.iso',
           raw_response: true)
=> <RestClient::RawResponse @code=200, @file=#<Tempfile:/tmp/rest-client.20170522-5346-1pptjm1>, @request=<RestClient::Request @method="get", @url="http://releases.ubuntu.com/16.04.2/ubuntu-16.04.2-desktop-amd64.iso">>
>> raw.file.size
=> 1554186240
>> raw.file.path
=> "/tmp/rest-client.20170522-5346-1pptjm1"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用rest-client 将文件下载到磁盘,而不先将其全部加载到内存中 的相关文章

  • 有关 Linux 内存类型的问题

    关于Linux内存我有以下问题 我知道活动内存是最常访问的内存部分 但是有人可以解释一下 linux 如何考虑将内存位置用于活动内存或非活动内存 主动存储器由哪些部分组成 磁盘 文件缓存是否被视为活动内存的一部分 有什么区别Buffers
  • Rails 和 Mysql 的毫秒数

    使用 Rails Mysql 时存储时间 以毫秒为单位 的最佳方式是什么 我将使用小数和composed of 以便能够将该值作为Ruby 时间进行操作 有人有更好的主意吗 自从提出这个问题以来 已经过去了好几年了 这是更新的解决方案 ht
  • 如何在 Ruby 中将一个数组添加到另一个数组而不最终得到多维结果?

    I tried somearray some thing anotherarray another thing somearray push anotherarray flatten 我期望 some thing another thing
  • 安装 Sass 时出错(Ruby 2.5.0.1、MSYS2 20161025.0.0)

    我尝试安装 Sass 我安装了Ruby and MSYS2在此之前 来自所有人的最新消息巧克力味 https chocolatey org choco install ruby choco install msys2 看来它们已正确安装 r
  • FieldPath 字段名称不能包含“.”当尝试使用 AGGREGATE 时

    我的查询有什么问题吗 db table aggregate match gt expr gt and gt eq gt size gt events 4 events 0 updated gt lt gt 2019 05 05 我越来越 M
  • Rails 应用程序中的持久 TCP 连接

    我有一个在服务器上运行的第三方应用程序 它对客户端进行身份验证并返回响应 我的问题是 对于我收到 Rails 应用程序的每个请求 我都需要建立 TCP 连接并获取数据 是否可以有一个持久连接 以便我可以减少建立连接的开销 我希望你使用的是
  • c++ 12位变量,我该怎么做?

    我正在构建一个体素引擎 所以我担心内存使用情况 使用 12 位而不是 16 位块 ID 可以节省大量内存 我有一个 3D 块 id 数组 每个 id 都有一个静态配置 我不确定实现这一目标的好方法是什么 有没有一种方法可以获取一块原始内存并
  • 在轮询器内异步运行代码

    在我的 ruby 脚本中 我使用 celluloid zmq gem 我尝试在轮询器内异步运行评估响应 使用 async evaluate response socket read multipart 但是 如果我从循环中删除睡眠 不知何故
  • 如何将命令行参数传递给 rake 任务

    我有一个 rake 任务需要将一个值插入到多个数据库中 我想从命令行或从another耙任务 我怎样才能做到这一点 您可以通过向任务调用添加符号参数来指定 rake 中的形式参数 例如 require rake task my task a
  • 如何在 Ruby 中使用循环输出所有可能的组合?

    我刚刚开始学习编程 并试图编写一个输出所有可能组合的函数 到目前为止 我已经能够找到尺寸 2 的所有可能组合 但我不确定如何使代码保持开放式以处理更大尺寸的组合 某种递归会有用吗 我知道我可以使用内置的组合方法 但我只是想弄清楚如何从头开始
  • 按顺序重载每个方法

    我有一个 erb 模板 它为 httpd conf 生成配置文件 重要的是 最后写入特定位置 它是包罗万象的 目前代码看起来像 cluster apps each do app Render config end 我想重载应用程序对象上的每
  • Ruby 守护进程,用于使临时 Ruby 实例的对象保持活动状态

    Ruby 是否提供了一种在不同运行的 Ruby 进程之间共享变量 更重要的是 类对象和我认为对此有用的任何其他数据抽象 的机制 例如 如果我有一个类被实例化 初始化并仔细调整到某种状态 我希望该状态对我全天所有其他独立的 Ruby 和 Ir
  • Environment.WorkingSet 错误地报告内存使用情况

    Environment WorkingSet 错误地报告在 Windows 2003 Server 上运行的网站的内存使用情况 操作系统版本 Microsoft Windows NT 5 2 3790 Service Pack 2 NET
  • 如何在 Rails 中制作动态下拉菜单?

    我正在开发一个电子商务项目 其中将有用于选择尺寸的单选按钮 我有一个数量下拉菜单 我想根据用户所选尺寸的可用库存使此下拉列表动态化 谁能告诉我如何在 Rails 上做到这一点 不会用大量的 javascript 扰乱我的视图文件 如果您使用
  • Windows 中内存分配的限制+我计算得是否正确?

    我正在编写一个需要大量内存的程序 大型图形分析 目前我的程序中有两个主要的数据结构 占用了大部分内存 这些都是 n n 类型的矩阵int 和长度为 n 的数组 类型Node 在本例中 节点是一个包含两个 int 的结构体 sizeof No
  • 序列化对于对象大小估计可靠吗?

    我使用序列化来估计对象使用的内存量 我已经读过this https stackoverflow com questions 426396 how much memory does a c net object use and this ht
  • 如何从 Ruby 2.0 中的字符串数组获取值

    我有这个字符串数组 array nike air nike steam nike softy nike strength smooth sleeper adidas air addidas jogar adidas softy adidas
  • 设置 MetaspaceSize 的指南 - java 8

    64 位服务器的 MetaspaceSize 默认值是多少 我在官方文档中没有找到它 我观察到 在服务器 JVM 进程中 GC 频率有时会变高并持续增长 如果我重新启动服务几次 它就会恢复稳定 我认为这是由于 JRE 升级造成的 JVM 堆
  • “array.map”是否保留原始顺序?

    我有一个User类has many Jobs 我使用以下代码映射作业 def ranges user jobs map u u start at u end at end 我有一个比较两个数组的规范 my array start1 end1
  • JVM内存段分配

    好吧 我有一个关于 JVM 内存段的问题 我知道每个 JVM 都会选择稍微不同地实现这一点 但这是一个总体概念 在所有 JVM 中应该保持相同 一个在运行时不使用虚拟机执行的标准C C 程序在运行时有四个内存段 代码 堆栈 堆 数据 所有这

随机推荐