如何使用 RestClient 修复 Ruby 中的套接字错误?

2024-02-16

我在用RestClient在 ruby​​ 类中进行网络调用。我得到了SocketError每当我没有连接到互联网时。我已经添加了一个救援块来捕获异常,但我仍然无法这样做。

错误消息是:SocketError (Failed to open TCP connection to api.something.com:443 (getaddrinfo: Name or service not known))

module MyProject
  class Client
    def get_object(url, params={})
      response = RestClient.get(url, {params: params})
    rescue SocketError => e
      puts "In Socket errror"
    rescue => e
      puts (e.class.inspect)
    end
  end
end

广泛的救援被召集并打印SocketError,但是为什么前面的rescue SocketError没有被触发!

你看到我缺少的东西了吗?


如果您想优雅地失败,则需要挽救一些例外情况。

require 'rest-client'
def get_object(url, params={})
  response = RestClient.get(url, {params: params})
rescue RestClient::ResourceNotFound => e
  p e.class
rescue SocketError => e
  p e.class
rescue Errno::ECONNREFUSED => e
  p e.class
end

get_object('https://www.google.com/missing')
get_object('https://dasdkajsdlaadsasd.com')
get_object('dasdkajsdlaadsasd.com')
get_object('invalid')
get_object('127.0.0.1')

因为您可能会遇到有关 uri 是 404 目标、不存在的域、IP 等的问题。

正如您在上面看到的,在处理连接到远程 uri 时可能会遇到不同的情况。上面的代码从最常见的场景中解救出来。

第一个 URL 丢失,由 RestClient 本身处理。

以下三个域是无效域,将会因 SocketError 失败(在这种情况下基本上是 DNS 错误)。

最后,在最后一次调用中,我们尝试连接到没有运行服务器的 IP - 因此它会抛出 ERRNO::ECONNREFUSED

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

如何使用 RestClient 修复 Ruby 中的套接字错误? 的相关文章

  • Rails Partial (Rails 3, HAML) 任意慢

    我使用的是 Rails 3 0 1 HAML 0 3 22 和 Mongrel 1 1 5 MongoMapper 不是 AR 我正在渲染一个列表 每个列表项都是它自己的部分 每次页面渲染其中一个列表项部分时 渲染时间都会延长近 100 倍
  • close 似乎不适用于 WebSocket

    我有这个简单的 JavaScript 代码 window ws new WebSocket ws 127 0 0 1 8000 ws onopen function ws send hello Ruby 中的服务器如下所示 require
  • 可以在哈希每个循环中访问索引吗?

    我可能遗漏了一些明显的东西 但是有没有办法访问哈希每个循环内迭代的索引 计数 hash three gt one four gt two one gt three hash each key value any way to know wh
  • 在 debian Squeeze 上安装 RoR

    有什么方法可以在我的 debian squeeze 上安装 Ruby 1 9 2 或 1 8 7 Rails 3 吗 您可能不想在生产计算机上使用 RVM 它的 PATH 魔力会在不明显的地方 例如 cron 作业 被破坏 然后你就会陷入困
  • 如何检查rails上传的文件类型?

    我如何查看即将到来的文件类型 例如 csv 或 xls 请给个代码 我得到文件是这样的 aut name uploaded io original filename File open Rails root join public uplo
  • 如何从 Ruby 检查具有特定 pid 的进程是否正在运行?

    如果有多种方法 请列出 我只知道一个 但我想知道是否有一种更干净的 Ruby 方式 之间的区别Process getpgid and Process kill方法似乎是当 pid 存在但由另一个用户拥有时发生的情况 Process getp
  • Rails f.check_box 设置选中/未选中值

    所以我在 Rails 中得到了一个带有复选框的表单助手 我希望该复选框在选中或取消选中时具有 thatvalue 或 thisvalue 值 我还没有找到如何设置它的地方 f check box field 我发现了类似的东西 但它不起作用
  • 如何使用 Rails 应用程序中的 s3 在存储桶之间复制文件?

    我目前正在开发一个 Rails 应用程序 尝试将视频从 s3 中的一个存储桶复制 移动到另一个存储桶 但是我在 Rails 应用程序上不断收到代理错误 502 在杂种日志中 它显示 无法分配内存 一旦发生此错误 应用程序就会终止 我们必须重
  • 在 Rails 4 中渲染部分/rake 任务/后台作业/模型中的视图

    我读过很多关于在 rake 任务 后台作业 模型中渲染 Rails 部分和视图的内容 我在 Stackoverflow 和网络上找到的绝大多数内容都描述了在 Rails 3 中工作的方法 但它们似乎已经过时了 而且我没有让它们工作 即使花了
  • 在新的 RHEL6 服务器上安装 ruby​​-filemagic gem 时遇到困难

    它似乎正在寻找 libmagic so 1 文件 我有那个文件 它位于 usr lib64 中 我没有以 root 用户身份运行此安装 我也在使用 rvm 和 Bundler 这是我的 bundle 命令的结果 当它到达 Gemfile 中
  • 如何使用 ruby​​ 的循环和 haml 创建表?

    我正在尝试制作一个如下所示的 html 表 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 我的数据结构是这样的 f ary 1 250 这是我的哈姆尔代码 table border gt 1 tbody tr cnt 0 f
  • 跨 NAT 的 UDP 客户端无法从服务器接收数据

    我正在尝试在服务器 在公共 IP 上 和客户端 跨 NAT 之间使用 UDP 进行双向通信 我的逻辑是 如果服务器将一些数据发送到 IP 和它接收数据包的端口 客户端仍然应该收到它 因为 NAT 将具有最终将数据包发送到客户端的映射 客户端
  • 为什么 Rails 5 将“索引”更改为“外键”?

    如果你在 Rails 4 中有这个 t references event index true 现在你可以使用foreign key代替index在 Rails 5 中 我不太明白为什么他们决定这样做 因为功能保持不变 您添加的是索引 而不
  • gem install rmagick 在 OS X El Capitan 上失败

    几天前我升级到 El Capitan 并运行了 brew update brew upgrade 它更新了 imagemagick 导致 ruby 的 rmagick gem 停止工作 我想没问题 我就跑 gem install rmagi
  • Rails:渲染不起作用,仍然出现“模板丢失”

    我目前正在学习 Rails 指南 我完成了这些步骤 但仍然遇到错误 我的 Ruby 版本是ruby 2 1 1p76Rails 版本是4 0 4 按照指南的指示 我创建了一个Article Controller class Articles
  • (在 Ruby 中)允许混合类方法访问类常量

    我有一个为其定义常量的类 然后我定义了一个类方法来访问该类常量 这很好用 一个例子 usr bin env ruby class NonInstantiableClass Const hello world class lt lt self
  • 无需别名的 Ruby YAML 编写

    我正在从 ruby 将数据写入 yaml 文件 并且经常在该文件上添加别名 像 id001 somekey somevalue id001 就我而言 我使用 yaml 文件来aid可读性并将名称添加到文件中的值 因为现有数据只是 没有键的分
  • 错误“未初始化常量 AWS (NameError)”

    它说 AWS 未初始化 我正在使用 aws sdk core gem 我尝试使用 aws sdk gem 代替 问题仍然存在 这是initializers aws rb 文件 AWS config access key id gt ENV
  • 方法调用中是否有记忆约定?

    我想避免在方法调用中重新评估值 直到现在 我一直在这样做 def some method some method begin lot s of code end end 但它最终变得非常丑陋 在一些代码中 我看到类似以下内容 def som
  • 自定义变形在rails3上不起作用?

    我正在使用 Rails 3 0 1 并在initializers inflections rb 中有以下代码 ActiveSupport Inflector inflections do inflect inflect irregular

随机推荐

  • 使用“BaseClass *”类型的表达式初始化“SubClass *__strong”时不兼容的指针类型

    在 Objective C 中 为什么我们不能alloc init or new一个带有超类的基类对象 而我们可以使用超类的构造函数来初始化 下面是一些代码 s1可以很轻松地创建 NSMutableString s1 NSString st
  • 如何在另一个项目中包含 Web 参考端点配置

    我有 2 个项目 X 和 Y Y 调用 Web 服务 配置在 Y 的 app config 它是一个 DLL 中定义 当 X 调用 Y 方法时 出现以下异常 System InvalidOperationException Could no
  • 如何获取HTA窗口的大小?

    您可以设置 HTA 窗口的大小 但我找不到获取其大小的方法 我所能想到的就是读书document body offsetWidth and offsetHeight 但这些给你的是视口大小而不是实际的窗口大小 有可能知道吗 似乎没有属性或方
  • 退出临界区

    考虑多个线程同时执行以下代码 long gf 0 global variable or class member if InterlockedCompareExchange gf 1 0 0 lock cmpxchg some exclus
  • 重写 JS 中的赋值运算符

    var myObject myKey myValue typeof myObject myKey returns string myObject myKey newValue console log myObject myKey print
  • 如何在Python 3.x中强制输入整数? [复制]

    这个问题在这里已经有答案了 我正在尝试用 Python 编写一个程序 该程序接受输入以重复斐波那契数列的次数 i 1 timeNum input How many times do you want to repeat the sequen
  • 用 C++ 读/写设备

    如何用 C 读取 写入设备 该设备位于 dev ttyPA1 我考虑过 fstream 但我不知道设备是否具有我可以在不阻塞应用程序的情况下读取的输出 我的目标是创建一个应用程序 您可以在终端中写入一些内容 然后将其发送到 dev ttyP
  • 简单 SparkSQL 查询中未修剪分区

    我正在尝试从 SparkSQL 表 S3 中的 parquet 有效地选择各个分区 但是 我看到 Spark 打开表中所有 parquet 文件的证据 而不仅仅是那些通过过滤器的文件 对于具有大量分区的表来说 即使是小型查询也会变得昂贵 这
  • IOS Swift - 无法从地址簿中检索个人笔记

    有人有什么建议为什么我可以获得名字 姓氏和生日 但是我无法检索从 iphone 通讯录中提交的笔记吗 准备工作 已授予地址簿访问权限 添加到地址簿中的人员包含所有字段 包括注释 当前结果 nil 仅用于注释 所有其他字段均已正确检索 使用的
  • Firebase 中如何计算连接

    连接数是如何计算的 假设我有一个 Web 应用程序 其中一个负载会向所有连接的客户端发送一条消息 假设我有 5 个连接的客户端 这是否意味着只要打开了 Web 应用程序的浏览器选项卡 它就会计为 1 个连接 这意味着我将有 6 个并发连接
  • 无法从groovy连接到oracle数据库

    您好 我无法连接到 groovy 中的 Oracle 数据库 我在 groovy 控制台中使用了以下代码 但出现以下编译错误 unable to resolve class oracle jdbc driver OracleTypes at
  • 找不到 ViewModel 的视图

    我有一个使用 Caliburn Micro 的 wpf 应用程序 我有一个视图 MyView
  • Python:没有名为“dash.development”的模块。 “dash”不是一个包

    我正在尝试运行这个 Dash 教程https github com cryptopotluck alpha vantage tutorial tree master dash bootstrap https github com crypt
  • R:如何相对于 x 轴分散(抖动)点?

    我在 R 中有以下代码片段 dat lt data frame cond factor rep A 10 rating c 1 2 3 4 6 6 7 8 9 10 ggplot dat aes x cond y rating geom b
  • 无法在 Visual Studio 2013 中显示 SQL Azure 表定义

    我收到的错误是 加载问题 设计器在加载表定义时遇到错误 我可以很好地查看VS内表中的数据 甚至还可以查询数据 这是我的计算机上的全新安装 我尝试过的 尝试在 服务器资源管理器 和 SQL Server 对象资源管理器 检查我的登录凭据是否有
  • 我应该使用什么标记来描述使用 schema.org 的社交媒体链接?

    我有一个地方 本地企业 其中有多个字段可以很好地映射到 schema org 条目 有一个字段我不确定如何标记 我们有该企业社交媒体帐户的链接 例如 Twitter 帐户 Facebook 页面和 Pinterest 帐户 这些应该如何在
  • Django:ModelChoiceField 删除默认--------- 选择

    如何从 ModelChoiceField 中删除默认的 选择 Use empty label None field2 forms ModelChoiceField queryset empty label None 请检查文档模型选择字段
  • 如何使用 SFINAE 检测 noexcept 方法

    我问的是一个 流行 问题的变体 检测类方法的存在 我在 SO 中读过很多答案 大多数 C 17 后 解决方案看起来像this https stackoverflow com questions 55191505 c compile time
  • 分发依赖于静态框架的动态框架的正确方法是什么?

    我正在构建一个闭源动态框架 它依赖于第三方闭源静态框架 我将静态依赖框架链接到我的框架的项目 目标 如中所述这个苹果技术说明 https developer apple com library content technotes tn243
  • 如何使用 RestClient 修复 Ruby 中的套接字错误?

    我在用RestClient在 ruby 类中进行网络调用 我得到了SocketError每当我没有连接到互联网时 我已经添加了一个救援块来捕获异常 但我仍然无法这样做 错误消息是 SocketError Failed to open TCP