2

アプリで django-storages と boto をインストールして有効にし、ファイルを S3 にアップロードするためのすべての手順に従いました。(このアプリケーションは Heroku でのデプロイを目的としているため、virtualenv を使用して依存関係を管理しています。)

ローカル開発のために、すべての資格情報を ~/.bash_profile に入れました。

export AWS_ACCESS_KEY_ID=xxxx
export AWS_SECRET_ACCESS_KEY=yyyy
export S3_BUCKET_NAME=zzzz

それで、素晴らしいですが、これは:

> python manage.py shell
>>> import boto
>>> conn = boto.connect_s3()
>>> conn.get_all_buckets()

次のデバッグ メッセージと次のエラーが生成されます。

2012-06-04 23:17:34,432 [DEBUG] boto: path=/
2012-06-04 23:17:34,432 [DEBUG] boto: auth_path=/
2012-06-04 23:17:34,433 [DEBUG] boto: Method: GET
2012-06-04 23:17:34,433 [DEBUG] boto: Path: /
2012-06-04 23:17:34,433 [DEBUG] boto: Data: 
2012-06-04 23:17:34,433 [DEBUG] boto: Headers: {}
2012-06-04 23:17:34,433 [DEBUG] boto: Host: s3.amazonaws.com
2012-06-04 23:17:34,433 [DEBUG] boto: establishing HTTPS connection: host=s3.amazonaws.com, kwargs={'timeout': 2}
2012-06-04 23:17:34,433 [DEBUG] boto: Token: None
2012-06-04 23:17:34,436 [DEBUG] boto: StringToSign:
GET


Tue, 05 Jun 2012 03:17:34 GMT
2012-06-04 23:17:36,900 [DEBUG] boto: encountered SSLError exception, reconnecting
2012-06-04 23:17:36,901 [DEBUG] boto: establishing HTTPS connection: host=s3.amazonaws.com, kwargs={'timeout': 2}
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "../venv/lib/python2.7/site-packages/boto/s3/connection.py", line 346, in get_all_buckets
    response = self.make_request('GET', headers=headers)
  File "../venv/lib/python2.7/site-packages/boto/s3/connection.py", line 454, in make_request
    override_num_retries=override_num_retries)
  File "../venv/lib/python2.7/site-packages/boto/connection.py", line 838, in make_request
    return self._mexe(http_request, sender, override_num_retries)
  File "../venv/lib/python2.7/site-packages/boto/connection.py", line 803, in _mexe
    raise e
SSLError: _ssl.c:484: The handshake operation timed out

私が理解できないのは、SAME EXACT CREDENTIALS を使用すると、Mac の GUI を使用して S3 を参照して問題なく接続できるということです。すべてのバケットを一覧表示できます。バケット zzzz に入ることができます。ファイルをアップロードできます。もう一度ダウンロードできます。削除できます。すべては順調です。しかし、Boto で何を試しても、それ以上のコメントなしでタイムアウトします。

ローカル環境で boto がタイムアウトになるのはなぜですか?

アップデート

以下に絞り込むことができました。

>>> import httplib
>>> h1 = httplib.HTTPSConnection('s3.amazonaws.com')
>>> h1.request ("GET", "/")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 958, in request
    self._send_request(method, url, body, headers)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 992, in _send_request
    self.endheaders(body)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 954, in endheaders
    self._send_output(message_body)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 814, in _send_output
    self.send(msg)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 776, in send
    self.connect()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1161, in connect
    self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 382, in wrap_socket
    ciphers=ciphers)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 143, in __init__
    self.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 306, in do_handshake
    self._sslobj.do_handshake()
error: [Errno 60] Operation timed out

一方:

>>> h1 = httplib.HTTPSConnection('google.com')
>>> h1.request ("GET", "/")
>>> r1 = h1.getresponse()
>>> print  r1.status, r1.reason
301 Moved Permanently

httplib.HTTPSConnection をびっくりさせているのは、AWS について何ですか?

(上記のリクエストが正確で完全な AWS リクエストではないことはわかっていますが、サーバーからの応答を取得しようとするためだけに単純化しました。)

4

2 に答える 2

1

残念ながら、問題は自宅のインターネットにあるようです。ラップトップを別の場所に持って行ったとき、問題は繰り返されませんでした。つまり、この問題は、Django、Boto、AWS、S3、SSL、Python、またはリモートで興味深いものとは何の関係もなく、すべては Time Warner Cable がどれだけひどいものかということと関係があります。信じられますか?!

于 2012-06-09T19:47:35.533 に答える
1

デバッグ出力の次の行に基づいて:

boto: establishing HTTPS connection: host=s3.amazonaws.com, kwargs={'timeout': 2}

boto 設定ファイルに次のようなものを入れたとします。

[Boto]
http_socket_timeout = 2

あれは正しいですか?その場合、このタイムアウトを 10 秒または 20 秒に増やすとどうなりますか。それでもタイムアウトが発生しますか?

于 2012-06-05T09:15:49.150 に答える