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

Rails 4 - Ruby 2.2.2 - Amazon AWS S3 - dragonfly 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. Я буду смотреть на это дальше.

ОБНОВИТЬ:

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

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

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

2 ответа

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

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

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

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

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