Как запустить стандартный профиль импорта по расписанию?

Как запустить стандартный профиль импорта по расписанию?

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 tburdin
  • Группа: Пользователь
  • Сообщений: 10
  • Регистрация: 08.04.2010

06.05.2010 14:34

Добрый день! Проблема следующая, есть выгрузка из 1С, которая формирует csv файл и кладёт его в определённое место на фтп.
Каждый раз приходится запускать импорт со стороны магенты вручную. Неудобно... Может кто подскажет как запускать это импорт по расписанию
или сразу после обновления csv файла на фтп?

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

06.05.2010 14:46

Я использовал указанный ниже скрипт.
Сохраните его с именем Cron_Import.php и затем вызывайте с командной строки так:
wget -O - http://<ваш сайт>/Cron_Import.php/?files=<файл для импорта>.csv

<?php
//uncomment when moved to server - to ensure this page is not accessed from anywhere else
//if ($_SERVER['REMOTE_ADDR'] !== '<your server ip address') {
//  die("You are not a cron job!");
//}

require_once 'app/Mage.php';
 
  umask(0);

  //$_SERVER['SERVER_PORT']='443';
  Mage::app();

  $profileId = 3; //put your profile id here
  $filename = Mage::app()->getRequest()->getParam('files'); // set the filename that is to be imported - file needs to be present in var/import directory  
  if (!isset($filename))  {
 die("No file has been set!");
  }
  $logFileName= $filename.'.log';  
  $recordCount = 0;

  Mage::log("Import Started",null,$logFileName);  
 
  $profile = Mage::getModel('dataflow/profile');
  
  $userModel = Mage::getModel('admin/user');
  $userModel->setUserId(0);
  Mage::getSingleton('admin/session')->setUser($userModel);
  
  if ($profileId) {
    $profile->load($profileId);
    if (!$profile->getId()) {
      Mage::getSingleton('adminhtml/session')->addError('The profile you are trying to save no longer exists');
    }
  }

  Mage::register('current_convert_profile', $profile);

  $profile->run();
  
  $batchModel = Mage::getSingleton('dataflow/batch');
  if ($batchModel->getId()) {
    if ($batchModel->getAdapter()) {
      $batchId = $batchModel->getId(); 
      $batchImportModel = $batchModel->getBatchImportModel();
      $importIds = $batchImportModel->getIdCollection();  

      $batchModel = Mage::getModel('dataflow/batch')->load($batchId);      
      $adapter = Mage::getModel($batchModel->getAdapter());
      foreach ($importIds as $importId) {
        $recordCount++;
        try{
          $batchImportModel->load($importId);
          if (!$batchImportModel->getId()) {
             $errors[] = Mage::helper('dataflow')->__('Skip undefined row');
             continue;
          }

          $importData = $batchImportModel->getBatchData();
          try {
            $adapter->saveRow($importData);
          } catch (Exception $e) {
            Mage::log($e->getMessage(),null,$logFileName);          
            continue;
          }
        
          if ($recordCount%20 == 0) {
            Mage::log($recordCount . ' - Completed!!',null,$logFileName);
          }
        } catch(Exception $ex) {
          Mage::log('Record# ' . $recordCount . ' - SKU = ' . $importData['sku']. ' - Error - ' . $ex->getMessage(),null,$logFileName);        
        }
      }
      foreach ($profile->getExceptions() as $e) {
        Mage::log($e->getMessage(),null,$logFileName);          
      }
      
    }
  }
  echo 'Import Completed';
  Mage::log("Import Completed",null,$logFileName);


#3 tburdin
  • Группа: Пользователь
  • Сообщений: 10
  • Регистрация: 08.04.2010

06.05.2010 15:51

Огромное спасибо! счас попробую :D

#4 tburdin
  • Группа: Пользователь
  • Сообщений: 10
  • Регистрация: 08.04.2010

06.05.2010 16:52

К сожалению из-за своей технической безграмотности, так и не понял, как запустить импорт из командной строки:
(да и какой? магазин на вирт. хостинге, доступа по ssh нет).

Есть вариант запуска скрипта из командной строки браузера, если не сложно, приведите пример.

#5 tburdin
  • Группа: Пользователь
  • Сообщений: 10
  • Регистрация: 08.04.2010

06.05.2010 16:56

Например, csv файл находится у меня в папке /media/import/upload.csv
Скрипт в данным кодом и названием Cron_Import.php был создан в корне магазина.
Дальнейшие действия?

#6 dimekh
  • Группа: Пользователь
  • Сообщений: 107
  • Регистрация: 14.04.2010

06.05.2010 17:20

[noindex]ну вообще на виртуальных хостингах ssh-доступ предусмотрен. например, или. Посмотрите внимательнее в панели управления.
чтобы подключиться, скажем на Mac потребуется терминал.
в терминале набрать: ssh user@hostname
где user и hostname надо взять в панели управления хостинга.[/noindex]

#7 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

06.05.2010 17:59

Просмотр сообщенияtburdin (06.05.2010 16:52) писал:

Есть вариант запуска скрипта из командной строки браузера, если не сложно, приведите пример.


http://<ваш сайт>/Cron_Import.php/?files=<файл для импорта>.csv

#8 tburdin
  • Группа: Пользователь
  • Сообщений: 10
  • Регистрация: 08.04.2010

06.05.2010 18:10

Ничего не происходит увы... То есть поразительно быстро появляется надпись Import Completed.
А эффект нулевой (для эксперимента все наименования в файле были заменены на 3333, 4444 и т.д.)
Похоже не работает...

#9 tburdin
  • Группа: Пользователь
  • Сообщений: 10
  • Регистрация: 08.04.2010

06.05.2010 18:15

Может кто поможет на конкретном магазине всё это настроить? В долгу не останемся )))

#10 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

06.05.2010 18:18

Скрипт в процессе работы делает записи в системный журнал Magento. Из анализа этих записей можно понять, на каком шаге происходит сбой скрипта.

#11 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

06.05.2010 18:22

Просмотр сообщенияtburdin (06.05.2010 18:15) писал:

Может кто поможет на конкретном магазине всё это настроить? В долгу не останемся )))


Если через административную панель Magento импорт проводится успешно и без ошибок, могу настроить и импорт по расписанию. Будет стоить $100 и выполнено в течение дня. Контакты на личной странице.

#12 kromb
  • Группа: Пользователь
  • Сообщений: 3
  • Регистрация: 24.04.2010

16.05.2010 11:54

Импорт из панели администратора проходит отлично, без всяких ошибок и записи обновляются.

А скрипт добавляет только первую запись из .csv файла, а на остальные пишет в лог ошибку:
SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1


Если запустить повторно, то даже первую запись не обновляет, а в лог пишется ошибка:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '3-55641' for key 1


Полный лог работы скрипта:
2010-05-16T08:52:29+00:00 DEBUG (7): Import Started
2010-05-16T08:52:33+00:00 DEBUG (7): SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1
2010-05-16T08:52:33+00:00 DEBUG (7): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '3-55662' for key 1
2010-05-16T08:52:33+00:00 DEBUG (7): SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1
2010-05-16T08:52:34+00:00 DEBUG (7): SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1
2010-05-16T08:52:34+00:00 DEBUG (7): SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1
2010-05-16T08:52:34+00:00 DEBUG (7): Starting Mage_Dataflow_Model_Convert_Adapter_Io :: load
2010-05-16T08:52:34+00:00 DEBUG (7): Loaded successfully: "/home/domen/docs/var/import/import.csv"
2010-05-16T08:52:34+00:00 DEBUG (7): Starting Mage_Dataflow_Model_Convert_Parser_Csv :: parse
2010-05-16T08:52:34+00:00 DEBUG (7): Found 5 rows
2010-05-16T08:52:34+00:00 DEBUG (7): Starting catalog/convert_adapter_product :: parse
2010-05-16T08:52:34+00:00 DEBUG (7): Import Completed


#13 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

22.05.2010 17:36

В скрипте действительно были ошибки (правда, диагностические сообщения были не такие, какие вы указали).
Новая версия скрипта здесь: Magento: модуль импорта товаров через cron

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

Поделиться темой: