Closed MrLogaz closed 6 years ago
Заметил еще один забавный факт, время выполнения скрипта доя его вылета примерно одинаковое.
[16:28:08] Внимание! Большое кол-во операций, увеличен тайм-аут между запросами! [16:32:39] Error edit: C:/git/gd-config/brn/media/webpro.js Разница 04:31
[16:48:26] Внимание! Большое кол-во операций, увеличен тайм-аут между запросами! [16:53:12] Error edit: C:/git/gd-config/brn/media/kd.png Разница 04:46
[17:03:22] Внимание! Большое кол-во операций, увеличен тайм-аут между запросами! [17:08:09] Error edit: C:/git/gd-config/brn/media/kd.png Розница 04:47
[17:33:27] Внимание! Большое кол-во операций, увеличен тайм-аут между запросами! [17:38:13] Error edit: C:/git/gd-config/brn/media/footer-heading.svg Разница 04:46
[17:59:25] Внимание! Большое кол-во операций, увеличен тайм-аут между запросами! [18:04:02] Error edit: C:/git/gd-config/brn/media/line-2.png Разница 04:37
Разница во времени практически одинаковая, складывается ощущение что сервер insales обрывает соединение по некому таймауту.
У API существует лимит обращений - 500 в минуту. В вашем случае как раз он проявился, я увеличу тайм аут между операциями ещё и выведу нормальную ошибку в случае превышения лимита.
Если в теме много файлов, советую загружать тему с помощью загрузки из файла в бек-офисе.
В 1.8.31 вывел ошибку про ограничение лимита.
@VladimirIvanin
if (taskListLength > 200 && taskListLength < 300) {
_this.options.delay = 300;
} else if (taskListLength >= 300 && taskListLength < 400) {
_this.options.delay = 500;
} else if (taskListLength >= 400 && taskListLength < 600) {
_this.options.delay = 1300;
} else if (taskListLength >= 600) {
_this.options.delay = 2000;
} else {
_this.options.delay = 100;
}
Даже при условии что каждый таск будет выполняться мгновенно, лимит в 500 обращений в минуту должен сработать при таймауте обращений между задачами меньше 120 мс. 60000/500=120
Это ограничение не должно было срабатывать даже при старых таймаутах
if (taskListLength > 200) {
this.options.delay = 300;
}
Особенно при прошлых таймаутах в 500 и 1000.
Тем не менее после этих изменений загрузка прошла успешно, хоть и крайне долго за 18 минут.
Я воспроизводил вашу ошибку с точно такими же результатами и в ответе сервера была статистика обращений в минуту, ошибку выдавало когда обращений к API больше 500. Повторюсь, темы с большим кол-вом файлов никак не получится заливать быстро по API. Притом что оказывается ограничение в 500 запросов не на 1 минуту, а на 5. Код нужно править снова
Подробнее про проблему Частота запросов к API На приложение накладываются ограничение в 500 запросов к API одного магазина за 5 минут. Время расчитывается с момента первого запроса в серии. Количество выполненых запросов в текущем промежутке времени передается в HTTP заголовке API-Usage-Limit (пример: API-Usage-Limit: 1/500).
При превышении лимита доступ к API становится недоступным до окончания текущих 5 минут. В таком случае код ответа сервера - 503 и при этом в HTTP заголовке Retry-After передается время до начала предоставления доступа в секундах.
Что мешает загружать архив руками? Замечу, что с радостью сделал бы и автоматическое создание новых тем и быструю загрузку если бы API позволяло.
В лучшем случае в будущем появится возможность заливать архив темы через API Чтоб сокращать время и не делать вот такие таймауты
При запуске загрузки с помощью IU.upload() из gulp Скрипт выполняется, идет загрузка, но потом до ходит до файла и вылетает с ошибкой.
Попробовал выполнить uploader upload оно сработало хорошо, тема полностью залилась без ошибок. Пробую повторить gulp задачу и снова вылетает, но уже на другом файле.
Если снова повторить эту же галп задачу, то загрузка снова споткнется именно на это этом файле, если запустить спустя какое время то может уже на другом файле споткнуться.
Как быть с этой проблемой? Версия "insales-uploader": "1.8.30",