首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当对静态文件使用s3,boto,django-storage时,连接被同级重置

当对静态文件使用s3,boto,django-storage时,连接被同级重置
EN

Stack Overflow用户
提问于 2013-12-07 10:08:48
回答 3查看 12.1K关注 0票数 23

我正在尝试改用亚马逊s3来托管我们的django项目的静态文件。我用的是django,boto,django-storage和django-Compreser.当我在我的dev服务器上运行collect static时,我得到了错误

代码语言:javascript
复制
socket.error: [Errno 104] Connection reset by peer 

我所有静态文件的大小都是74MB,看起来并不太大。有没有人以前见过这个,或者有什么调试技巧?

这是完整的跟踪信息。

代码语言:javascript
复制
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 371, in handle
    return self.handle_noargs(**options)
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 163, in handle_noargs
    collected = self.collect()
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 113, in collect
    handler(path, prefixed_path, storage)
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 303, in copy_file
    self.storage.save(prefixed_path, source_file)
  File "/usr/local/lib/python2.7/dist-packages/django/core/files/storage.py", line 45, in save
    name = self._save(name, content)
  File "/usr/local/lib/python2.7/dist-packages/storages/backends/s3boto.py", line 392, in _save
    self._save_content(key, content, headers=headers)
  File "/usr/local/lib/python2.7/dist-packages/storages/backends/s3boto.py", line 403, in _save_content
    rewind=True, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 1222, in set_contents_from_file
    chunked_transfer=chunked_transfer, size=size)
  File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 714, in send_file
    chunked_transfer=chunked_transfer, size=size)
  File "/usr/local/lib/python2.7/dist-packages/boto/s3/key.py", line 890, in _send_file_internal
    query_args=query_args
  File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 547, in make_request
    retry_handler=retry_handler
  File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 966, in make_request
    retry_handler=retry_handler)
  File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 927, in _mexe
    raise e
socket.error: [Errno 104] Connection reset by peer

更新:我不知道如何调试这个错误,但后来这种情况就停止了,这让我认为这可能与S3上的某些东西有关。

EN

回答 3

Stack Overflow用户

发布于 2016-08-18 21:46:59

tl;dr

如果您的存储桶不在默认地域,您需要告诉boto要连接哪个地域,例如,如果您的存储桶位于us-west-2,则需要在settings.py中添加以下行:

代码语言:javascript
复制
 AWS_S3_HOST = 's3-us-west-2.amazonaws.com'

冗长的解释:

这不是权限问题,您不应该将存储桶权限设置为“经过身份验证的用户”。

如果您在非默认区域(在我的示例中,我使用的是us-west-2)创建存储桶,则会发生此问题。

如果你不使用默认区域,也没有告诉boto你的存储桶所在的区域,boto会连接到默认区域,S3会回复一个307重定向到存储桶所属的区域。

不幸的是,由于boto中的这个bug:

https://github.com/boto/boto/issues/2207

如果307回复在boto完成上传文件之前到达,boto将不会看到重定向,并将继续上传到默认区域。最终,S3关闭套接字,导致“对等重置连接”。

这是一种竞争条件,它取决于正在上传的对象的大小和互联网连接的速度,这就解释了为什么它是随机发生的。

有两个可能的原因导致操作员在一段时间后不再看到错误:

代码语言:javascript
复制
- he later created a new bucket in the default region and the problem went away by itself. 
- he started uploading only small files, which are fast enough to be fully uploaded by the time S3 replies with 307
票数 17
EN

Stack Overflow用户

发布于 2016-09-22 15:19:31

当你第一次创建一个新的存储桶时,有时会出现这个问题,你必须等待几个小时或几分钟后才能开始上传。我不知道为什么s3会这样。为了证明这一点,尝试创建一个新的存储桶,将你的django存储指向它,当你试图从你的django项目上传任何东西时,你会看到它显示连接对等重置,但等待几个小时或再试一次,它将会工作。重复相同的步骤并查看。

票数 5
EN

Stack Overflow用户

发布于 2015-08-29 05:48:18

我刚刚在尝试设置第二个S3存储桶以用于测试/开发和时遇到了这个问题,这有助于部署较旧版本的应用程序

我不知道为什么这会有帮助,但对于你们中的那些在事后以这种方式阅读的人(像我,几个小时前),尝试部署一个不同的应用程序版本是值得的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20436705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档