Rails 4 - Ruby 2.2.2 - Amazon 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: 名前またはサービスが不明 (SocketError)」から「Excon::Error::Socket: getaddrinfo: ホスト名に関連付けられたアドレスがありません (SocketError)」になりました。
失敗した応答に対してキャプチャされた URL は、合格した URL のいずれかとは異なります。これをさらに調べます。
アップデート:
トンボのイニシャライザは、失敗したパスと同じパスを指定します。url_host はデフォルトの機能をオーバーライドするため、削除することにしました。
# myapp/config/initializers/dragonfly.rb
...
url_host: 'mybucket.s3-us-west-1.amazonaws.com'
この結果、変化はありませんでした。同じ URL が引き続き使用され、失敗する唯一の URL です。