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-адрес по-прежнему используется и является единственным, который не работает.