Rails 4 - Ruby 2.2.2 - 亚马逊 AWS S3 - 蜻蜓 1.0.12 - 蜻蜓-s3_data_store 1.2 - 雾-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 gem 从 0.45.4 升级到了 0.51.0。除此之外,我还将 Fog gem 从 1.36.0 更新到 1.38.0。
升级后,错误从“getaddrinfo: Name or service not known (SocketError)”变为“Excon::Error::Socket: getaddrinfo: No address associated with hostname (SocketError)”
为失败的响应捕获的 url 与通过的 url 之一不同。我会进一步研究这个。
更新:
蜻蜓初始化程序指定与失败的路径相同的路径,并且因为 url_host 覆盖了默认功能,我决定将其删除。
# myapp/config/initializers/dragonfly.rb
...
url_host: 'mybucket.s3-us-west-1.amazonaws.com'
这导致没有任何变化。仍然使用相同的 url,并且是唯一失败的。