Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
ShadowSix opened this issue Aug 10, 2016 · 23 comments

Comments

@ShadowSix
Copy link

Выделенный сервер 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
Copy link
Author

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

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

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


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

@sgtpep
Copy link
Owner

sgtpep commented Aug 10, 2016

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

@ShadowSix
Copy link
Author

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

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

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

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

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

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

@ShadowSix
Copy link
Author

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

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

@sgtpep
Copy link
Owner

sgtpep commented Aug 11, 2016

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

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

@ShadowSix
Copy link
Author

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

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

@sgtpep
Copy link
Owner

sgtpep commented Aug 12, 2016

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

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

@ShadowSix
Copy link
Author

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

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

@ShadowSix
Copy link
Author

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

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

@sgtpep
Copy link
Owner

sgtpep commented Aug 12, 2016

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

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

@ShadowSix
Copy link
Author

ShadowSix commented Aug 12, 2016

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

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

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

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

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

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

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

@sgtpep
Copy link
Owner

sgtpep commented Aug 12, 2016

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

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

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

@ShadowSix
Copy link
Author

Ок, помогите разобраться с проблемой на выделенном сервере: 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
Copy link
Owner

sgtpep commented Aug 13, 2016

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

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

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

@ShadowSix
Copy link
Author

Вот какую ошибку выдает:
[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
Copy link
Author

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

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

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

@sgtpep
Copy link
Owner

sgtpep commented Aug 15, 2016

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
Copy link
Author

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

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

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

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


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


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

@sgtpep
Copy link
Owner

sgtpep commented Aug 17, 2016

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

@sgtpep sgtpep closed this as completed Aug 17, 2016
@Kucenkov
Copy link

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

@shsl
Copy link
Contributor

shsl commented May 4, 2017

Решение:
библиотека 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
Copy link

itkos commented Oct 3, 2018

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

@shsl
Copy link
Contributor

shsl commented Nov 3, 2018

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants