Буквально через одну секунду после обновления нашего производственного приложения до Ruby 2.5.3 с Ruby 2.3.6 (мы находимся на Rails 5.2.0), мы начали получать оповещения Net :: OpenTimeout в нашей платформе мониторинга исключений.
Мы изолировали развертывание обновления Ruby (которое просто меняло версию ruby в .ruby-version
и Gemfile), чтобы мы могли точно определить любые новые проблемы, связанные с изменением версии ruby.
Ruby 2.5.3 был установлен с использованием rvm.
Мы используем mandrill для отправки электронных писем, и их служба поддержки говорит, что с их платформой все в порядке, что, по нашему мнению, является правдой, поскольку было бы слишком много совпадений для тех случаев, когда исключения начинают появляться в точном втором завершенном развертывании. .
Мы используем Sidekiq, поэтому после сбоя заданий они попадают в очередь повторов и, в конце концов, перезапускаются, когда они успешно выполняются. Это очень случайно, но почти 70% наших почтовых программ сейчас терпят неудачу в первый раз в Сидекике и только потом отправляются со второй или третьей попытки.
Вот наш конфиг mandrill:
{
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, проблемы не исчезнут.