首页 > 解决方案 > 升级到 Ruby 2.5.3 后 Rails Net::OpenTimeout 执行过期

问题描述

在我们的生产应用程序从 Ruby 2.3.6 更新到 Ruby 2.5.3 后一秒(我们使用的是 Rails 5.2.0),我们开始在异常监控平台中收到 Net::OpenTimeout 警报。

我们隔离了 Ruby 升级的部署(只是在.ruby-versionGemfile 中更改了 ruby​​ 版本),以便我们可以查明 ruby​​ 版本更改的任何新问题。

Ruby 2.5.3 是使用 rvm 安装的。

我们使用 mandrill 发送电子邮件,他们的支持团队说他们的平台一切正常,我们相信这是真的,因为如果在第二次部署完成后就开始出现异常情况,那太巧合了。

我们正在使用 Sidekiq,因此在作业失败后,它们会进入重试队列,并最终在它们成功时重新启动。这是非常随机的,但现在我们几乎 70% 的邮件在 Sidekiq 中第一次失败,然后才在第二次或第三次尝试时发送。

这是我们的山魈配置:

    {
        address: 'smtp.mandrillapp.com',
        authentication: :plain,
        user_name: 'ouruser@name.com',
        port: 2525,
        password: 'thisIsNotOurRealPassword',
        domain: 'ourdomain.com'
      }

更新:麻烦更加灾难性,因为我们的应用程序使用的每个出站连接(如外部 API)也以一种非常随机(但频繁)的方式超时,Net::OpenTimeout 执行过期。

坏消息是,即使我们使用 Ruby 2.3.6 重新部署,问题也不会消失。

标签: ruby-on-railsruby

解决方案


推荐阅读