Почему я получаю прерывистый Excon:: Ошибка:: Socket: getaddrinfo: Нет адреса, связанного с именем хоста (SocketError)?

Rails 4 - Ruby 2.2.2 - Amazon AWS S3 - стрекоза 1.0.12  - dragonfly-s3_data_store 1.2 - fog-aws 0.10.0

Около 99% времени у нас нет проблем. Проблема обычно возникает только в периоды, когда использование является высоким, но я заметил, что это происходит, когда пользователей почти не было. Строка, которая выдает ошибку:

 # excon/lib/excon/socket.rb
 # line 100 inside the connection method.
 addrinfo = ::Socket.getaddrinfo(*args)

Ошибка происходит везде в приложении. Иногда ошибка возникает, когда нет удаленного соединения. - я больше не могу это проверить.

Я использовал регистраторы Rails для захвата передаваемых аргументов, и, похоже, нет разницы между проходом и сбоем. Вот несколько примеров:

 # PASS
 ["s3.amazonaws.com", 443, 0, 1, nil, nil, false]
 ["mybucket.s3.amazonaws.com", 443, 0, 1, nil, nil, false]

 # FAIL
 ["mybucket.s3-us-west-1.amazonaws.com", 443, 0, 1, nil, nil, false]

Я столкнулся с несколькими форумами, которые заставляют меня полагать, что обновление было необходимо для excon gem. Я обновил жемчуг Excon от 0,45.4 до 0,51.0. В дополнение к этому я также обновил Fog gem от 1.36.0 до 1.38.0.

После обновления ошибка перешла из "getaddrinfo: имя или служба неизвестна (SocketError)" в "Excon:: Error:: Socket: getaddrinfo: нет адреса, связанного с именем узла (SocketError)"

URL-адрес, полученный для неудавшегося ответа, отличается от URL-адреса, который проходит. Я буду смотреть на это дальше.

UPDATE:

Инициализатор dragonfly указывает тот же путь, что и тот, который терпит неудачу, и поскольку url_host переопределяет функциональность по умолчанию, я решил удалить ее.

 # myapp/config/initializers/dragonfly.rb
 ...
 url_host: 'mybucket.s3-us-west-1.amazonaws.com'

Это не привело к изменениям. Тот же URL-адрес по-прежнему используется и является единственным, который не работает.

Ответы

Ответ 1

У меня тоже была эта ошибка. В моем случае виновником была либо загрузка сервера (медленная загрузка файла), либо специальные символы в имени файла. Поскольку вы также видите это во время низкого времени использования, вы можете посмотреть имена файлов, которые люди загружают. Для меня обычно возникала ошибка, когда кто-то загружал файл с немецкими умляутами (ä, ö, ü, ß) во имя файла.

Поэтому, пожалуйста, попробуйте загрузить файл с некоторым специальным символом в имени и сообщить нам, верно ли это воспроизводит ошибку.

Если это так, просто откройте специальные символы или поищите файл по-другому. Описание описания специальных символов: https://github.com/markevans/dragonfly-s3_data_store/issues/6.

Ответ 2

Это может не решить вашу проблему, но я видел что-то подобное в двух случаях -

  • Брандмауэр ограничил порт, на который была настроена моя система.
  • Мои учетные данные авторизации/аутентификации были неправильными/устаревшими.