ruby on rails - ¿Por qué recibo intermitente Excon:: Error:: Socket: getaddrinfo: no hay una dirección asociada con el nombre de host(SocketError)?
ruby-on-rails sockets (2)
Rieles 4 - Ruby 2.2.2 - Amazon AWS S3 - libélula 1.0.12 - dragonfly-s3_data_store 1.2 - fog-aws 0.10.0
Alrededor del 99% de las veces no tenemos problemas. El problema generalmente solo ocurre cuando el uso es alto, pero noté que ocurre cuando casi no hay usuarios. La línea que arroja el error:
# excon/lib/excon/socket.rb
# line 100 inside the connection method.
addrinfo = ::Socket.getaddrinfo(*args)
El error ocurre en todas partes en la aplicación. A veces, el error se ve cuando no hay una conexión remota. - Ya no puedo verificar esto.
Usé los registradores de Rails para capturar los argumentos que se están pasando y aparentemente no hay diferencia entre un pase y un error. Aquí hay unos ejemplos:
# 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]
Encontré varios foros que me llevaron a creer que se necesitaba una actualización de la gema excon. Actualicé la gema Excon de 0.45.4 a 0.51.0. Además, también actualicé la gema de niebla de 1.36.0 a 1.38.0.
Después de actualizar, el error pasó de "getaddrinfo: Nombre o servicio desconocido (SocketError)" a "Excon :: Error :: Socket: getaddrinfo: No hay dirección asociada con el nombre de host (SocketError)"
La url capturada para una respuesta fallida es diferente de una de las urls que pasan. Voy a mirar a esto más lejos.
ACTUALIZAR:
El inicializador de libélula especifica la misma ruta que la que falla y debido a que url_host anula la funcionalidad predeterminada, decidí eliminarlo.
# myapp/config/initializers/dragonfly.rb
...
url_host: ''mybucket.s3-us-west-1.amazonaws.com''
Esto resultó en ningún cambio. La misma url todavía se usa y es la única que falla.
Puede que no resuelva tu problema, pero he visto algo como esto en dos casos:
- El cortafuegos restringió el puerto al que mi sistema estaba configurado.
- Mis credenciales de autorización / autenticación estaban equivocadas / desactualizadas.
Yo también tuve este error. En mi caso, el culpable fue la carga del servidor (una carga lenta de archivos) o los caracteres especiales en el nombre del archivo. Ya que también ve esto durante los tiempos de uso bajo, es posible que desee ver los nombres de archivo que las personas cargan. Para mí, el error ocurrió normalmente cuando alguien subió un archivo con diéresis alemanas (ä, ö, ü, ß) en el nombre del archivo.
Entonces, intente cargar un archivo con algún carácter especial en el nombre y díganos si esto reproduce el error fielmente.
Si este es el caso, simplemente escapa de los caracteres especiales o nombra el archivo de manera diferente. Aquí hay una descripción del tema de los caracteres especiales: https://github.com/markevans/dragonfly-s3_data_store/issues/6 .