2013-12-07 2 views
19

Я пытаюсь переключиться на использование amazon s3 для размещения наших статических файлов для нашего проекта django. Я использую django, boto, django-storage и django-compressor. Когда я бегу собирать статический на моем Dev сервере, я получаю ошибкуСброс соединения с помощью peer при использовании s3, boto, django-storage для статических файлов

socket.error: [Errno 104] Connection reset by peer 

Размер всех моих статических файлов 74MB, который не кажется слишком большим. Кто-нибудь видел это раньше или какие-либо советы по отладке?

Вот полный след.

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 

UPDATE: У меня нет ответа на то, как отладить эту ошибку, но позже это просто перестал происходящее, который заставляет меня думать, что, возможно, придется сделать что-то на S3.

+1

У меня такая же проблема прямо сейчас. Что-нибудь еще появилось? – hexsprite

+1

Существует поддерживаемая вилка django-хранилищ по адресу https://github.com/jschneier/django-storages-redux, которая может быть стоит попробовать, если вы столкнетесь с этим снова. –

+1

У меня такая же проблема:/она управляет копированием некоторых файлов в статичное ведро во время развертывания, затем каждый раз получая эту ошибку в одном и том же месте – Brendan

ответ

-1

Вы должны установить ваши ковшеобразных разрешения к Authenticated Users List + Загрузить/Удалить или вы можете создать определенный пользователь в IAM раздела амазонки и настройки только права доступа для данного конкретного пользователя

Этих помог мне несколько раз назад: Setup S3 for Django

+2

На самом деле, я не думаю, что вы должны использовать список «Прошедшие проверку» - это делает его доступным для всех с учетной записью Amazon S3, а не только для пользователей вашей учетной записи. (http://www.bucketexplorer.com/documentation/amazon-s3--access-control-list-acl-overview.html) – seddonym

+0

@seddonym Это правильно. Спасибо, что указали это. Я этого не знал. Я удалил эту часть ответа. –

+0

boto3 выбрасывает другое исключение из-за недостаточных разрешений. – dlasalle

0

Я просто имел этот вопрос, пытаясь установить второй S3 ведро использовать для тестирования/разви и , что помогло развертывает более старую версию приложения.

У меня нет подсказки, почему это поможет, но для тех из вас, кто читает этот путь после факта (как я, пару часов назад), стоит попробовать развернуть другую версию приложения.

13

Т.Л., др

Если ведро не в регионе по умолчанию, вы должны сказать бото, какой регион для подключения, например, если ваше ведро в нас-западе-2 необходимо добавить следующую строку в settings.py:

AWS_S3_HOST = 's3-us-west-2.amazonaws.com' 

Long Объяснение:

Это не проблема разрешения, и вы не должны установить права доступа к ковшеобразному «Аутентифицированные пользователи».

Эта проблема возникает, если вы создаете свой ковш в регионе, который не является стандартным (в моем случае я использовал us-west-2).

Если вы не используете область по умолчанию и не указываете boto, в какой области находится ваш ведро, boto подключится к области по умолчанию, а S3 ответит перенаправлением 307 в область, где находится ведро.

К сожалению, из-за этой ошибки в Бото:

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

если 307 ответ поступает до бото завершения загрузки файла, бото не увидит редирект и будет держать загрузки в регионе по умолчанию , В конце концов S3 закрывает сокет, что приводит к «Сброс соединения с помощью одноранговой сети».

Это своего рода состояние гонки, которое зависит от размера загружаемого объекта и скорости вашего интернет-соединения, что объясняет, почему это происходит случайным образом.

Есть две возможных причины, почему OP перестал видеть ошибку после того, как некоторое время:

- 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 
4

Это выпуск someties происходит, когда вы создаете новое ведро в первый раз, вы должны ждать в течение нескольких часов или мин до начала загрузки. Я не знаю, почему s3 ведет себя так. Чтобы доказать, что попробуйте создать новый ковш, укажите на него хранилище django, и вы увидите, что он показывает сброс дублирования соединения, когда вы пытаетесь загрузить что-либо из своего проекта django, но подождите пару часов или минут, попробуйте еще раз, он будет работать. Повторите тот же шаг и посмотрите.

Смежные вопросы