marazmiki/django-selectel-storage

Ошибки при запуске collectstatic

Opened this issue · 7 comments

Добрый день.

Реализована ли поддержка загрузки файлов при вызове collectstatic?

Запускаю collectstatic --no-input и после загрузки нескольких файлов возникает:

  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 107, in collect
    handler(path, prefixed_path, storage)
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 325, in copy_file
    if not self.delete_file(path, prefixed_path, source_storage):
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 275, in delete_file
    self.storage.delete(prefixed_path)
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django_selectel_storage/storage.py", line 85, in delete
    self.container.remove(self._name(name), force=True)
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 260, in method
    return fn(self.name, *args, **kwargs)
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 22, in wrapper
    raise err
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 16, in wrapper
    return fn(storage, *args, **kwargs)
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 176, in remove
    r.raise_for_status()
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/requests/models.py", line 844, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 507 Server Error: status code 507 for url: https://187509.selcdn.ru/community/img/info_communities_2x.jpg

Судя по этому стэктрейсу файл удаляется при том, что контейнер совершенно пустой на момент запуска collectstatic.

А если вызвать команду с ключом --clear:

  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 176, in handle
    collected = self.collect()
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 89, in collect
    self.clear_dir('')
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 210, in clear_dir
    if not self.storage.exists(path):
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/django_selectel_storage/storage.py", line 89, in exists
    self.container.info(self._name(name))
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 260, in method
    return fn(self.name, *args, **kwargs)
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 16, in wrapper
    return fn(storage, *args, **kwargs)
  File "/usr/local/var/pyenv/versions/matbets/lib/python3.5/site-packages/selectel/storage.py", line 200, in info
    assert r.status_code == (200 if path else 204)
AssertionError

Здравствуйте,

Вопрос задан не совсем корректно: django-selectel-storage реализовывает интерфейс хранилищ, который предлагает Django. А команда collectstatic просто сохраняет найденную статику в эти хранилища, используя этот интерфейс. Таким образом, о какой-то особой поддержке загрузки файлов речи идти не может.

Что же касается ошибки. Месяц-полтора назад всё замечательно работало, Проверил прямо сейчас — выпадает та же ошибка. Почему-то всегда на шестом файле. Будем посмотреть, спасибо.

Похоже, Селектелу зачем-то потребовалось переписать API. Может, они при этом какой-нибудь троттлинг добавили, а внешняя библиотека selectel-api (она используется для API-запросов к облачному хранилищу) это не учитывает.

(добавлено) Хотя, с другой стороны, она 24 дня назад обновлялась. У Вас точно последняя версия selectel-api?

И, кстати, HTTP-ошибка 507 означает Insufficient Storage («переполнение хранилища»).

Через личный кабинет файлы загружаются с бОльшим объёмом без ошибок.

Возможно, хотя в личном кабинете наверняка троттл есть. У меня, кстати, без флага -c выпадает ошибка 503, а не 507

Версия библиотеки стоит последняя.

@dmitra90, только что проверил снова. Без флага -c всё прекрасно работает. Видимо, были временные проблемы на стороне Селектела.

С флагом -c по-прежнему есть проблема. Будем разбираться