Ruby 的“open_uri”是否在读取或失败后可靠地关闭套接字?

2024-04-07

我一直在使用open_uri拉下 ftp 路径作为数据源一段时间,但突然发现我几乎连续不断地收到“530 抱歉,已连接允许的最大客户端数 (95)”。

我不确定我的代码是否有问题,或者是否是其他人正在访问服务器,不幸的是,我似乎无法真正确定谁有问题。

本质上我正在读取 FTP URI:

  def self.read_uri(uri)
    begin
      uri = open(uri).read
      uri == "Error" ? nil : uri
    rescue OpenURI::HTTPError
      nil
    end
  end

我猜我需要在这里添加一些额外的错误处理代码...... 我想确保我采取一切预防措施关闭所有连接,以便我的连接不是有问题的问题,但是我认为 open_uri + read 会采取这种预防措施而不是使用 Net::FTP 方法。

最重要的是,我必须 100% 确定这些连接正在关闭,并且我周围没有一堆打开的连接。

有人可以建议如何正确使用 read_uri 拉入 ftp 并保证它关闭连接吗?或者我应该将逻辑转移到 Net::FTP,如果 open_uri 不够强大,这可以对情况产生更多控制?

如果我确实需要使用 Net::FTP 方法,是否有一种我应该熟悉的读取方法 vs 将其拉到临时位置然后读取它(因为我更愿意将其保留在缓冲区中)如果可能的话 vs fs)?


我怀疑你没有关闭手柄。OpenURI 的文档 http://rubydoc.info/stdlib/open-uri/frames从这个评论开始:

It is possible to open http/https/ftp URL as usual like opening a file:

open("http://www.ruby-lang.org/") {|f|
  f.each_line {|line| p line}
}

我查看了来源和open_uri如果您传递一个块,方法会关闭流,因此,调整上面的示例以适合您的代码:

uri = ''
open("http://www.ruby-lang.org/") {|f|
  uri = f.read
}

应该让你接近你想要的。


这是处理异常的一种方法:

# The list of URLs to pass in to check if one times out or is refused.
urls = %w[
  http://www.ruby-lang.org/
  http://www2.ruby-lang.org/
]

# the method
def self.read_uri(urls)

  content = ''

  open(urls.shift) { |f| content = f.read }
  content == "Error" ? nil : content

  rescue OpenURI::HTTPError
    retry if (urls.any?)
    nil
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 的“open_uri”是否在读取或失败后可靠地关闭套接字? 的相关文章

  • 如何从 Rails 中的 date_select 或 select_date 获取日期?

    Using select date给我回一个params my date with year month and day属性 如何轻松获取 Date 对象 我希望有类似的事情params my date to date 我很高兴使用date
  • 如何从引擎覆盖 Rails 应用程序路由?

    我有一个 Rails 应用程序 我正在尝试将 Rails 引擎集成到其中 主机应用程序有一些捕获所有路由 magic urls match gt admin rendering show match path edit gt admin r
  • Rails 3 在 Ruby 1.9.2 上初始化非常慢

    我使用 RVM 来管理环境 安装了 Ruby 1 9 2 p136 我认为是最新版本 和 Rails 3 创建了 gemset 并运行捆绑器 到目前为止一切正常 但 Rails 在运行命令 即生成 销毁 rake 等 时初始化速度非常慢 完
  • 仅删除多对多关系

    我有一个 has and belongs to many friends join table gt friends peoples 要添加朋友 我会这样做 people followers lt lt friend这会创建关系和新的个人资
  • ruby 中的 #encode 和 #force_encoding 有什么区别?

    我真的不明白之间的区别 encode and force encoding在 Ruby 中String班级 我明白那个 kam force encoding UTF 8 将迫使 kam 是UTF 8编码 但是怎么样 encode encod
  • Rails/Nginx 中的超时——最佳实践

    我正在开发一个应该在 Nginx 服务器上运行的 Rails 应用程序 根据输入 应用程序可能需要很长时间来处理请求 或者在出现错误时挂起 因此我想防止进程永远运行 除了确保客户端收到超时信号的 Nginx 配置之外 我想我可能仍然需要确保
  • 使用 attr_accessor 动态创建类属性

    在Ruby中 有没有办法动态地将实例变量添加到类中 例如 class MyClass def initialize create attribute name end def create attribute name attr acces
  • REXML - 如何提取单个元素

    我正在用 ruby 编写一些验收测试 其中涉及断言响应 XML 中值的存在 我的 XML 是这样的
  • 使用 Ruby aws-sdk 跟踪文件到 S3 的上传进度

    首先 我知道SO中有很多与此类似的问题 在过去的一周里 我读了大部分 如果不是全部 但我仍然无法让这项工作为我工作 我正在开发一个 Ruby on Rails 应用程序 允许用户将 mp3 文件上传到 Amazon S3 上传本身工作正常
  • Rails - 渲染:目标锚标记的操作?

    我希望像这样使用渲染 render action gt page form 我也尝试过这个 render template gt site page form 那也没用 这个特定页面上的表单位于最底部 如果提交时发生任何错误 我不希望用户被
  • rvm gem 安装错误?

    我正在摆弄 ruby gems 和 rvm 它工作得很好 但现在当我尝试安装 gem 时出现错误 gem install Rails错误 同时 执行 gem Errno EACCES 权限被拒绝 Users da rvm gems ruby
  • 没有要加载的文件 - ffi_c (LoadError)

    这个问题困扰了我几天 每当我使用 bring to front 方法时 require rubygems require watir browser Watir Browser new browser bring to front 我收到此
  • Ruby require 'file' 不起作用,但 require './file' 可以。为什么?

    我有一个充满 ruby 文件的文件夹 当我尝试使用位于同一目录中的另一个文件中的一个文件时require file 我得到一个LoadError但是当我使用require file 一切正常 有人可以向我解释为什么会发生这种情况吗 如果有什
  • 我无法让 ruby​​ 开发工具包适用于 Windows XP

    所以 我一生都无法让它正常工作 我的最终目标是安装 dbd odbc gem 并使其正常工作 从我读过的多篇文章来看 我需要安装ODBC 绑定 http www ch werner de rubyodbc 对于 ruby 以及 dbd od
  • 在 Ruby 中创建一个空文件:相当于“touch”?

    创建一个的最佳方式是什么emptyRuby 中的文件 类似于 Unix 命令的东西 touch https en wikipedia org wiki Touch 28Unix 29 touch file txt FileUtils tou
  • ruby从1.8.7升级到1.9.2(使用Rails 3.1.1)后本地服务器错误

    我刚刚安装了rvm并使用rvm将ruby从1 8 7升级到1 9 2 我在我的应用程序上运行了捆绑安装 它重新安装了我的 gems 当我在本地运行 Rails 服务器并将浏览器导航到 localhost 3000 时 服务器日志中显示以下错
  • 在端口80启动webrick(mysql2 gem问题)

    我正在尝试让我的 webrick 在端口 80 上提供服务 我尝试过 rails server p 80 但访问被拒绝 后来我明白使用端口1 1024需要root权限 所以我尝试了这个 sudo rails server p 80 但是 现
  • Ruby/Rails 集合到集合

    我有两个表与一个连接表连接 这只是伪代码 Library Book LibraryBooks 我需要做的是 如果我有一个图书馆的 id 我想获取该图书馆拥有的所有书籍所在的所有图书馆 因此 如果我有图书馆 1 图书馆 1 中有书籍 A 和
  • 存根和 rspec 旧语法的问题

    我正在编写一些代码并使用 rspec 但收到警告 提示语法已过时 我不太清楚应该如何编写它 it should calculate the value correctly do mock cards Card new clubs 5 Car
  • RoR - Rails 中的大文件上传

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

随机推荐

  • Ruby on Rails 使用 REST API 调用和 Devise 进行用户注册

    谁能指导我如何在 ruby on Rails 中从移动设备 rest API 注册用户 我正在使用 Devise 和 Rails 3 0 它给了我以下错误 Devise CustomRegistrationsController creat
  • 从文本名称实例化一个类

    不要问我为什么 但我需要执行以下操作 string ClassName SomeClassName object o MagicallyCreateInstance SomeClassName 我想知道有多少种方法可以做到这一点以及在哪种情
  • SQL Server - Management Studio - 客户端统计 - 服务器回复等待时间与客户端处理时间

    我有一个运行缓慢的查询 我一直在努力优化它 在 Management Studio 中查看客户端统计信息时 服务器回复等待时间约为 8 秒 客户端处理时间约为 1 秒 我一直认为服务器回复的等待时间是要处理的数字 而客户端处理时间通常与带宽
  • 在 Rails 模型中一起验证日期和时间字段

    编辑 如果下面的问题看起来有点 广泛 总结是我只想在模型中组合日期字段和可选时间字段 纯粹是为了使用日期验证器验证它 但我不能当我传入一个字符串作为时间时 让我的测试正确失败 编辑2 由于我仍在努力寻找一种将日期对象与时间对象连接起来以进行
  • SyntaxError:无法在没有模块的情况下使用 import 语句,TypeError [ERR_UNKNOWN_FILE_EXTENSION]:Catch 22

    我一直在使用 Node js 时遇到问题 这是相关代码 app ts const express require express const auth require service auth import Request Response
  • 如何在Magento的view.phtml中显示标签产品

    我创建了新主题并使用它们来创建产品 在查看页面中 我没有看到产品标签 我默认查看 view pthml 并知道中的标签 echo this gt getChildHtml product additional data 我的 view ph
  • 如何在java中使用正则表达式非捕获组进行字符串替换

    我有一个改变的要求AssemblyVersion在新的构建上 我用java代码来做string replaceAll regexPattern updatedString 此代码适用于正常的正则表达式模式 但我无法在此模式中使用非捕获组 我
  • 如何检查 JSP 页面上的变量?

    我有一组工作页面 想要在 JSP 页面上的断点处检查变量 不幸的是 变量的上下文菜单不会像在 Java 文件中那样显示正常的 检查 监视 选项 有任何想法吗 这是一个对我有用的解决方案 在 Eclipse 中打开 显示 选项卡视图 窗口 g
  • “通常的算术转换”和“整数提升”是同一回事吗?

    通常的算术转换 和 整数提升 是同一回事吗 我读过 通常的算术转换 用于使表达式的操作数具有相同的类型 而 整数提升 用于提升小于的类型int to int 但在MSDN https msdn microsoft com en us lib
  • Bitbucket 与 Github 的优缺点比较 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Disclaimer This is a subjective question Please follow relevant guidelin
  • 可以在 Yii2 中更改动作类吗?

    是否可以更改动作类 http www yiiframework com doc 2 0 yii base inlineaction html Yii2以某种方式使用 类似于如何在配置文件中设置许多其他组件的类 我想扩展这个课程 这样我就可以
  • 如何在iOS SDK中删除两个字符串中的共同字母? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何删除两个字符串中的常见字母并使用剩余的唯一字母生成新字符串 例如 String 1 Optimus Prime String 2 Dej
  • 如何使用 kotlin 显示在 recyclerview 中选择的单个项目

    我们如何标记单个项目被选中Recyclerview使用科特林 当我选择一个项目并单击其他项目时 应取消选择之前选择的项目 这是我在 kotlin 中的适配器类 class ListAdapter var context Context va
  • notificationDataSetChanged() 不刷新可扩展列表视图

    我在用Expandable ListView其中的数据通过填充Sqlite数据库 我已经提供了从中删除群组的选项ExpandableListView它实际上删除了相应的row在数据库中 但是该活动不会刷新 并且删除的 案例 是可见的 直到人
  • 使用 spring.NET 配置静态属性

    使用 spring NET 配置以下类的最佳实践是什么 using System Collections Generic using Edu3 DTOModel namespace Edu3 Data SubsonicProvider Re
  • distanceTo 返回什么距离?

    是否考虑了海拔变化 我的意思是 如果我从这个三角形的左顶点开始并在右上顶点结束 它返回距离a还是b double distanceInMetersFloat initialPosition distanceTo finalPosition
  • 通过键与字典项绑定

    假设我有一些字典 我想将该字典中的项目绑定到某些控件 并且我想通过项目键进行绑定 public partial class Window1 Window public Window1 InitializeComponent Dictiona
  • angerlySetInnerHTML 和

    我的页面需要本地化 我用的是gettext 我的i18n 函数返回翻译后的字符串并替换 s带有提供参数的符号 据我所知 我不能 危险的设定 一个 JSX 元素 但是我需要插入打开和关闭标签 我无法将字符串分成多个部分 因为后端为我提供了这样
  • 如何知道图像是 RGB 还是 BGR 格式?

    有没有办法提前知道用作系统输入的图像是 RGB 还是 BGR 格式 我正在使用 OpenCV 和 java API 我想将输入图像转换为灰度或 L a b 颜色空间 但在 OpenCV 中 您必须首先指定要转换的图像是 RGB 还是 BGR
  • Ruby 的“open_uri”是否在读取或失败后可靠地关闭套接字?

    我一直在使用open uri拉下 ftp 路径作为数据源一段时间 但突然发现我几乎连续不断地收到 530 抱歉 已连接允许的最大客户端数 95 我不确定我的代码是否有问题 或者是否是其他人正在访问服务器 不幸的是 我似乎无法真正确定谁有问题