Magento 2 - внутренняя ошибка сервера 500

У меня есть скрипт, который извлекает большие данные с другого сайта с помощью curl.

Но через некоторое время я получаю 500 внутренних ошибок сервера. В сценарии нет ничего плохого, но большие данные не извлекаются за один раз.

Я создал консольную команду, как показано ниже.

php bin/magento jet:sync_categories

и создал для него необходимые файлы.

Но с точки зрения пользователя это невозможно.

Что может быть альтернативой этому?


person Nitz    schedule 29.11.2016    source источник


Ответы (2)


Для лучшего решения вы должны использовать shell_exec('php your-shell-file &'); Используйте «&» в качестве последнего параметра для обработки вашего скрипта в фоновом режиме.

person Nilu Khair    schedule 29.11.2016

Для внутренней ошибки сервера 500; обычно это ошибка на стороне сервера. Если вы работаете локально, перейдите в свой Apache php.ini и измените max_execution_time=30 на самый большой временной интервал, скажем, max_execution_time=300 (секунды). Если вы идете к постороннему, это требует времени, особенно если вы отправляете большие данные.

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

  memory_limit=2G
  max_execution_time=300  
  post_max_size=8M

Надеюсь, что это работает.

person Wolfgang Leon    schedule 29.11.2016
comment
Спасибо. Я создаю расширение, поэтому невозможно сообщить каждому пользователю установить эту конфигурацию сервера. Есть ли какое-либо решение, которым можно управлять в самом кодировании - person Nitz; 29.11.2016
comment
Кажется, я понимаю, что ты делаешь. Немного почистите свой код, когда заходите внутрь базы данных. Большая проблема, которую я обычно вижу в Magento, заключается в том, что программист создает цикл для входа в базу данных для каждого SKU. Представьте себе все ресурсы, которые требует процесс, если у вас есть 500 SKU. Например. если вам нужно выполнить SELECT в базе данных вместо выполнения цикла foreach($skus as $sku): SELECT * FROM table WHERE sku = $sku endforeach. -----› Создайте запрос, используя предложение IN. Нравится ---› SELECT * FROM table WHERE sku IN $skus. Эти изменения действительно важны. - person Wolfgang Leon; 29.11.2016
comment
Если у вас нет доступа к базе данных, потому что вы используете API. Установите свойство тайм-аута менее 30 секунд, потому что обычно это тайм-аут для обычного сервера. - person Wolfgang Leon; 29.11.2016