Преждевременный тайм-аут WooCommerce REST API

Я использую «REST API» WooCommerce (худшее решение) в попытке массово вставлять / редактировать продукты из внешнего фида. Это отлично работает с моей стороны, но просто должно быть что-то, что WooCommerce терпит неудачу, и это мешает моему собственному прогрессу, потому что определенный (переменный) путь через любую из моих попыток выполняйте массовую вставку / редактирование в количестве 100 раз, я получаю сообщение об ошибке Invalid JSON returned for....

wooStockUpdate: Saving products to WooCommerce via bulk update/insert
wooStockUpdate: 4% products processed - estimated time left: 2394.48s
wooStockUpdate: 9% products processed - estimated time left: 2758.21s
wooStockUpdate: 14% products processed - estimated time left: 2412.816s
wooStockUpdate: 19% products processed - estimated time left: 2308.176s
wooStockUpdate: 23% products processed - estimated time left: 2961.035s
wooStockUpdate: 28% products processed - estimated time left: 2047.248s
wooStockUpdate: 33% products processed - estimated time left: 2017.906s
wooStockUpdate: 38% products processed - estimated time left: 1881.7s
wooStockUpdate: 42% products processed - estimated time left: 2359.295s
Invalid JSON returned for http://wholefoodearthdev/wc-api/v3/products/bulk?...
201

Каждый раз, когда он сообщает процент (и расчетное время, потому что все, что использует REST API, занимает несколько часов), он завершает итерацию отправки отдельных групп по 100 элементов в WooCommerce. Во время одного из них возникает ошибка, и это не зависит от того, что отправляется.

Несмотря на то, что он выдает ошибку, он все равно возвращает 201 - Created HTTP-статус, потому что он создал по крайней мере некоторые из 100 продуктов, и я просмотрел код, он просто повторно использует единственный код создания, поэтому он не может вернуть правильный код состояния для массового сбоя, так как один из элементов завершился успешно.

Самое главное, каждый раз, что это происходит, оно также выполнялось в течение примерно 180 секунд, поэтому я считаю, что это тайм-аут на стороне WooCommerce, поскольку я устанавливал свой запрос CURL и тайм-ауты PHP в 6 часов. Итак, что мне нужно знать, так это самый безболезненный способ заставить WooCommerce завершить работу. Я не действительно должен редактировать WooCommerce, поэтому, если это возможно без этого (а желательно без перенастройки сервера), это будет здорово.

Я предполагаю, что если это действительно просто полный контроль со стороны WooCommerce, не будет другого выбора, кроме его редактирования, но, надеюсь, они просто пропустили что-то в документации, объясняющее, как установить предел времени ожидания. Я пока что не видел ничего подобного, но заметил другие вещи, которые было бы очень полезно узнать раньше, которые также были упущены из документации, так что кто знает ...


person Deji    schedule 10.03.2016    source источник
comment
Вы пробовали делать меньше и чаще? Что-то вроде 30, 30, 30, 10.   -  person Faisal Mudhir    schedule 28.06.2016
comment
+ Фейсал, ну да, но это в любом случае не лучшее решение, так как из-за этого процесс занимает на много часов больше.   -  person Deji    schedule 28.06.2016
comment
В этом случае завершение может произойти в какой-либо другой конфигурации PHP, конфигурации Apache или даже на самом сервере. Я думаю, вы можете понять, что его прерывает, откопав нужный файл системного журнала.   -  person Faisal Mudhir    schedule 28.06.2016
comment
Я ставлю на другую конфигурацию php.ini, которую вы пропустили.   -  person Faisal Mudhir    schedule 28.06.2016
comment
Возможно, стоит посмотреть: php.net/manual/en/function.set -time-limit.php   -  person Faisal Mudhir    schedule 28.06.2016
comment
Нет, я все это проверил.   -  person Deji    schedule 28.06.2016
comment
Другие длительные процессы работают нормально, в частности, массовое добавление элементов в WooCommerce. В других частях API таких проблем нет.   -  person Deji    schedule 28.06.2016


Ответы (1)


Вам следует увеличить default_socket_timeout в php.ini, также, если вы используете стандартную библиотеку woocommerce, вам нужно увеличить const TIMEOUT в vendor/automattic/woocommerce/src/WooCommerce/HttpClient/Options.php

person Staś Zawada    schedule 27.09.2018
comment
Было бы неплохо, если бы это можно было установить в параметрах при создании экземпляра класса. Может быть, я просто еще не исследовал это. - person Difster; 11.11.2019