Почему я получаю периодически 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.
Это может не решить вашу проблему, но я видел нечто подобное в двух случаях:
- Брандмауэр ограничил порт, на который была настроена моя система.
- Мои учетные данные авторизации / аутентификации были неправильными / устаревшими.