Ruby on rails 为什么我会得到间歇性的Excon::Error::Socket:getaddrinfo:没有与主机名(SocketError)关联的地址?
Rails 4-Ruby 2.2.2-Amazon AWS S3-dragonfly 1.0.12 -蜻蜓-s3_数据_存储1.2-雾aws 0.10.0 大约99%的时间我们没有问题。这个问题通常只发生在使用率很高的时候,但我注意到它也发生在几乎没有用户的时候。引发错误的行:Ruby on rails 为什么我会得到间歇性的Excon::Error::Socket:getaddrinfo:没有与主机名(SocketError)关联的地址?,ruby-on-rails,ruby,sockets,excon,Ruby On Rails,Ruby,Sockets,Excon,Rails 4-Ruby 2.2.2-Amazon AWS S3-dragonfly 1.0.12 -蜻蜓-s3_数据_存储1.2-雾aws 0.10.0 大约99%的时间我们没有问题。这个问题通常只发生在使用率很高的时候,但我注意到它也发生在几乎没有用户的时候。引发错误的行: # excon/lib/excon/socket.rb # line 100 inside the connection method. addrinfo = ::Socket.getaddrinfo(*args)
# 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]
我遇到过几个论坛,这些论坛让我相信excongem需要更新。我将Excon gem从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\u主机覆盖了默认功能,所以我决定将其删除
# myapp/config/initializers/dragonfly.rb
...
url_host: 'mybucket.s3-us-west-1.amazonaws.com'
这没有导致任何变化。相同的url仍在使用,并且是唯一失败的url。我也有此错误。在我的例子中,罪魁祸首要么是服务器负载(文件上传速度慢),要么是文件名中的特殊字符。由于在使用率较低时也会出现这种情况,因此您可能需要查看人们上传的文件名。对我来说,错误通常发生在有人以文件名上传了一个带有德语umlauts(ä,ö,ü,ß)的文件时 因此,请尝试上传一个名称中带有特殊字符的文件,并告诉我们这是否真实地再现了错误
如果是这种情况,则只需转义特殊字符或以不同的方式命名文件。以下是对特殊角色问题的描述:。它可能无法解决您的问题,但我在两个案例中看到了类似的情况-
你能分享一些通过/失败的参数以供参考吗?谢谢。当我们升级宝石时,伐木工人被带走了。我现在将添加成功的args,但我要到明天才能提供失败的args列表。似乎url正在添加“-us-west-1”。这可能是我不幸的原因。以下重定向可能失败(当连接和bucket位于不同区域时发生)。有些问题有时可能有点不可靠。@geemus您对处理和/或调试此问题有什么建议吗?我们在简单的get请求以及文件上载/下载中看到了错误。有时错误很简单:SocketError:getaddrinfo:Name或service在没有上述“Exconn”部分的情况下未知。好的,如果您在simply GET请求中遇到错误,我的解释不适合您的情况。根据我自己的上述经验,除了我所描述的以外,我没有其他想法。对不起:(