sgtpep / woocommerce-1c

Provides data exchange between the WooCommerce plugin for WordPress and the business application "1C:Enterprise 8. Trade Management" (and compatible ones).
https://wordpress.org/plugins/woocommerce-and-1centerprise-data-exchange/
GNU General Public License v3.0
70 stars 41 forks source link

Плагин не справляется с большим объемом данных (10.000+ товаров) #5

Closed ShadowSix closed 8 years ago

ShadowSix commented 8 years ago

Выделенный сервер VDS - SSD 5Gb, Ram 512mb, Xeon 2x2.7hz, inet 10mb/s

Конфигурация 1С:Предприятие 8.3 (8.3.7.2027) - Управление торговлей, редакция 11.1 (11.1.2.8)

Версии: Wordpress 4.5.3–ru_RU Woocommerce Версия 2.6.4

Проблема при выгрузке 10.000 товаров. 1С выдает ошибку, на сайте товары либо загружаются частично, либо вообще не грузятся.

До 2-3 тысяч товаров, всё загружается, хоть и долго.

Нам нужно один раз загрузить весь каталог и потом обновлять цену и наличие.

!!!Ручная загрузку всего каталога не проходит. Зависает плагин или сайт.

Пожалуйста помогите! Очень необходима интеграция 1С на цмс Вордпресс.

Какие могут быть варианты решения? Потоковая загрузка? Увеличение ресурсов сервера? Смена версий?

ShadowSix commented 8 years ago

Вот ошибки из 1С при последней выгрузке:

10.08.2016 11:16:57 Выгрузка на сайт завершилась с ошибками. Не удалось получить данные с сервера. Проверьте правильность адреса сервера, порт, имя пользователя и пароль, а также настройки подключения к Интернет. Произошла ошибка: import.xml: Произошла ошибка на стороне сервера. Получен неизвестный статус импорта. Ответ сервера:

rollback 10.08.2016 11:16:57 Завершена выгрузка товаров


Ничего не выгрузилось.

sgtpep commented 8 years ago

Рекомендую вначале прочитать readme.txt. В нем, в частности, говорится, что из-за особенностей реализации плагина на стороне сервера может понадобится отключить лимиты времени исполнения скрипта обмена. В конфигурации Apache+mod_php плагин в большинстве случаев умеет отключать этот лимит. В более сложных конфигурациях (nginx, nginx+Apache, *CGI) могут понадобиться специфические настройки сервера для этого, в которых лучше разобраться и произвести пользователю плагина самостоятельно.

ShadowSix commented 8 years ago

Ознакомились, и сразу внесли изменения в конфигурацию php сервера: http://prntscr.com/c3vmfd

Всё равно проблема осталась. Большое количество товаров не выгружается:(

Пожалуйста подскажите, может ли это быть связанно со структурой базы и большим количеством свойств товара?

Структура базы: http://prntscr.com/c3vn30

Количество свойств номенклатуры: http://prntscr.com/c3vnah

Очень надеемся на вашу помощь! Готовы оплатить решение нашей проблемы.

ShadowSix commented 8 years ago

Проблема всё еще актуальна. Не выгружается номенклатура в большом количестве. +плагин не работает с новой версией WooCommerce 2.6.4.

Пожалуйста помогите настроить работу плагина!

sgtpep commented 8 years ago

С настройкой сервера помочь, к сожалению, не смогу. А вот совместимость с последней версией WooCommerce можем попробовать исправить.

Пробовали ли вы удалить и установить плагин? Т.к. я вносил недавно исправления совместимости без увеличения номера версии плагина. Если да, но совместимости нет, тогда мне нужны диагонстическая информация: сообщения об ошибках, логи и т.д.

ShadowSix commented 8 years ago

Сервер настроен. Нужна помощь со стороны плагина. -Пробовали ли вы удалить и установить плагин? -Да, пробовали. Не помогло.

Прикрепил лог ошибок 1С. Это выгрузка из 1С с новым WooCommerce 2.6.4 log1C.txt

sgtpep commented 8 years ago

Всё-таки есть подозрение, что у вас старая версия плагина. В логах указано, что ошибка произошла в exchange/import.php:232 в запросе "SELECT term_id FROM wp_woocommerce_termmeta JOIN wp_terms..."

Но 9 дней назад я заменил все таблицы wp_woocommerce_termmeta на wp_termmeta: https://github.com/sgtpep/woocommerce-1c/commit/1b7c33a8d9da9603e9bdccdb92ce47c9fd627565. Даже попробовал скачать с wordpress.org: https://downloads.wordpress.org/plugin/woocommerce-and-1centerprise-data-exchange.zip, там актуальный код.

ShadowSix commented 8 years ago

С нуля переустановили Wordpress. Поставили Woocommerce 2.6.4. Скачали плагин по вашей ссылке. Установили. Запустили выгрузку. Снова ошибка, прикрепил логи. log1C-2.txt

Поставили для теста новую конфигурацию, в ней та же ошибка: http://prntscr.com/c4qvyb

ShadowSix commented 8 years ago

Вы можете прислать свои контактные данные. Нам очень нужна полноценная работа этого плагина. Готовы оплатить доработки и потраченное вами время.

Напишите нам drumvic@mail.ru

sgtpep commented 8 years ago

Спасибо, это уже другое сообщение об ошибке. Добавил исправления, которые появятся после повторного удаления-установки плагина (wordpress и woocommerce переустанавливать не обязательно).

У меня, к сожалению, нет возможности протестировать последние правки, поэтому могу ориентироваться пока только на ваши логи.

ShadowSix commented 8 years ago

Установил обновленную версию. Выгрузка работает, но только малым количеством товаров! (до 2-3 тыс товаров)

Сейчас пробуем загрузить хотя бы 1 раз весь каталог (у нас около 10-13тыс товаров), но безуспешно.

Сервер выдает 502 ошибку. Хотя настроен корректно и ограничения сняты.

Пробовали как через 1С так и вручную через команду

При выгрузке из 1С у нас 2 файла: import 47mb offers 5mb

Возможно ли сделать пакетную выгрузку? Разбить импорт на несколько частей? Тогда любой сервер будет тянуть любым количеством номенклатуры.

Пожалуйста помогите!:(

sgtpep commented 8 years ago

Извините, но с настройкой сервера в конфигурации отличной от рекомендуемой (apache+mod_php) помочь не смогу по ряду причин.

Пакетная выгрузка, к сожалению не поддерживается и не заложена архитектурно.

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

ShadowSix commented 8 years ago

Ок, помогите разобраться с проблемой на выделенном сервере: http://188.225.74.248/info.php

Здесь как раз связка apache+mod_php.

Вот настройки которые внесли: php_value post_max_size 128M php_value upload_max_filesize 128M php_value memory_limit 256M php_value max_execution_time 30000 php_value max_input_time 30000 php_value session.gc_maxlifetime 30000

Только что выгружали 5тыс. товаров ВРУЧНУЮ, прикрепляю лог с ошибкой: log1C-3.txt

Проходит 3 минуты и вылезает роллбэк. Помогите оптимизировать скрипт для работы с большим объемом товаров.

sgtpep commented 8 years ago

Попробуйте зайти на сервер по SSH и выполнить команду в консоли:

sudo sh -c "tail -f -n 0 /var/log/apache2/*.log"

Затем запустить обмен, который бы завершился ошибкой с rollback. Возможно, в каком-нибудь файле error.log вывелась бы ошибка, проливающая свет на проблему. Либо можно вручную просмотреть последние ошибки в папке /var/log/apache2 (предположительно, в файле error.log).

ShadowSix commented 8 years ago

Вот какую ошибку выдает: [15-Aug-2016 07:04:38 UTC] PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 792192 bytes) in /var/www/www-root/data/www/testforest.isp/wp-includes/formatting.php on line 1590

Скрипт зависает, пожирая всю оперативную память и затем просто роллбэк.

Пожалуйста помогите!

ShadowSix commented 8 years ago

Вот еще новая ошибка: при повторной выгрузке товаров выходит ошибка.

  1. выгрузка прошла успешно - 4 338 товаров
  2. проходит с ошибкой.

Мы просто искали на каком количестве появляется ошибка Rollback и случайно обнаружили, что повторная выгрузка с ошибкой проходит. Пожалуйста посмотрите. log1C-4.txt

sgtpep commented 8 years ago

PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 792192 bytes) in /var/www/www-root/data/www/testforest.isp/wp-includes/formatting.php on line 1590

Это ошибка о нехватке оперативки в 256МБ. Здесь можно только попробовать увеличить memory_limit в настройках PHP до работоспособной величины.

Мы просто искали на каком количестве появляется ошибка Rollback и случайно обнаружили, что повторная выгрузка с ошибкой проходит. Пожалуйста посмотрите.

Попытался исправить данную ошибку в последнем коммите. Попробуйте, пожалуйста, переустановить.

ShadowSix commented 8 years ago

Это ошибка о нехватке оперативки в 256МБ. Здесь можно только попробовать увеличить memory_limit в настройках PHP до работоспособной величины.

Изменили на 512. Загрузили 6.800 товаров, затем 8.000, загрузили 10.000

Попытался исправить данную ошибку в последнем коммите. Попробуйте, пожалуйста, переустановить.

Делали выгрузку на последней версии, всё работает.


Вопрос: возможно ли вы гружать вариантативные товары из 1С?


Всем тем, у кого возникнут проблемы с выгрузкой большого каталога (больше 5000 товаров) советую арендовать VDS сервер и настраивать до тех пор пока выгрузка не будет проходить.

sgtpep commented 8 years ago

По моим наблюдениям, для десятков тысяч товаров хватало даже самого дешёвого тарифа на DigitalOcean. Т.е. должно быть достаточно простого VPS для возможности настройки веб-сервера.

Kucenkov commented 7 years ago

ShadowSix спасибо большое! помог мне) с rollback увеличил память с 128M на 512M, ошибка ушла, у меня не выгружался товар, были такие ошибка как rollback Ответ сервера: Error: Unknown import file type: prices rollback Error: Unknown import file type: rests

shsl commented 7 years ago

Решение: библиотека ZipArchive которая использована в распаковщике скрипта exchange.php жрет очень много памяти поэтому есть два варианта: 1) увеличивать память php - memory_limit=512 например и быть может хватит ей памяти 2) либо заменить строки с использование библиотеки на использование линуксовой unzip а именно - в файле exchange.php строки 338-343

$zip = new ZipArchive(); $result = $zip->open($zip_path); if ($result !== true) wc1c_error(sprintf("Failed open archive %s with error code %d", $zip_path, $result)); $zip->extractTo($data_dir) or wc1c_error(sprintf("Failed to extract from archive %s", $zip_path)); $zip->close() or wc1c_error(sprintf("Failed to close archive %s", $zip_path));

заменить на system("unzip ".$zip_path." -d ".$data_dir."/");

itkos commented 5 years ago

@shsl Добрый день! Подскажите, заменить весь блок на одну строку?

shsl commented 5 years ago

@shsl Добрый день! Подскажите, заменить весь блок на одну строку?

@itkos да весь блок + должна быть возможность исполнять системные команды unzip у меня ВПС