Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django httplib.HTTPSConnection连接到Amazon Web服务时超时_Django_Amazon S3_Boto_Httplib - Fatal编程技术网

Django httplib.HTTPSConnection连接到Amazon Web服务时超时

Django httplib.HTTPSConnection连接到Amazon Web服务时超时,django,amazon-s3,boto,httplib,Django,Amazon S3,Boto,Httplib,我已经按照所有说明在我的应用程序中安装并启用django存储和boto以将文件上载到S3。(由于此应用程序旨在部署在Heroku上,因此我使用virtualenv来管理依赖项。) 对于本地开发,我已将所有凭据放在~/.bash_配置文件中: export AWS_ACCESS_KEY_ID=xxxx export AWS_SECRET_ACCESS_KEY=yyyy export S3_BUCKET_NAME=zzzz 很好,但接下来: > python manage.py shell

我已经按照所有说明在我的应用程序中安装并启用django存储和boto以将文件上载到S3。(由于此应用程序旨在部署在Heroku上,因此我使用virtualenv来管理依赖项。)

对于本地开发,我已将所有凭据放在~/.bash_配置文件中:

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
AWS的什么地方让httplib.HTTPSConnection崩溃了


(我知道上面的请求不是正确且完整的AWS请求,但我简化了它,只是为了尝试从服务器获得响应。)

基于调试输出中的这一行:

boto: establishing HTTPS connection: host=s3.amazonaws.com, kwargs={'timeout': 2}
我假设您在boto配置文件中放置了类似的内容:

[Boto]
http_socket_timeout = 2

对吗?如果是这样,如果将超时时间增加到10秒或20秒会发生什么。你还得到超时吗?

不幸的是,问题似乎出在我的家庭互联网上!当我把笔记本电脑带到别处工作时,问题并没有重演。因此,问题与Django、Boto、AWS、S3、SSL、Python或任何有趣的东西无关,而与时代华纳有线电视的糟糕程度有关。你能相信吗

[Boto]debug=2 http\u socket\u timeout=2 num\u retries=0是的,我这么做了,b/c我太不耐烦了,等它失败的时间太长了,一旦我看到它一直失败-(出于好奇,如果您尝试不使用SSL(例如boto.connect\u s3(is\u secure=False))会发生什么情况?顺便说一句,我在本地尝试了完全相同的方法,效果很好。如果它在没有SSL的情况下工作,可能openssl安装有问题?老实说,我不确定该调用在哪里…我实际上没有编写任何boto代码。我在我的settings.py中启用了它,并对相关模型进行了以下更改:filepath=models.FileField(storage=S3BotoStorage(bucket=os.getenv('S3_bucket_NAME')),…)。你知道这是为什么吗?我必须创建一个文件/etc/boto.cfg,并将
[boto]\nis_secure=false
放入其中才能工作。
boto: establishing HTTPS connection: host=s3.amazonaws.com, kwargs={'timeout': 2}
[Boto]
http_socket_timeout = 2