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