Odkedy si pamätáme, Magento má problémy s profilmi importu a exportu, najmä pokiaľ ide o výkon. Vyskúšali sme mnoho rôznych riešení na zrýchlenie DataFlow a riešenie iných problémov súvisiacich s importom/exportom. Našli sme riešenie, ktoré vo väčšine prípadov pomáha. Najprv by som chcel spomenúť, že stránka stavu importu / exportu Magento občas zobrazuje iba bielu obrazovku (stránka sa nenačíta úplne alebo sa načíta prázdna), chyba 500 alebo iná náhodná chyba, keď sa import / export naozaj úloha stále beží na pozadí a úspešne sa dokončí.
Magento DataFlow má 4 hlavné časti
- Adaptér (prečíta externý zdroj údajov a umožní analyzátorovi prístup k nemu)
- Parser (prechádza cez externé údaje a prekladá ich do niečoho, čomu Magento rozumie)
- Mapper (Vezme externé dátové polia a priradí ich k správnym dátovým poliam Magento)
- Validátor (zabezpečuje, že údaje sú správne pred / po potvrdení)
Štandardný pracovný postup vyzerá asi takto
Vytvorte profil importu / exportu (buď cez Správcu profilov alebo Rozšírený profil, ktorý vám umožňuje vyladiť skutočný profil XML)
Pravdepodobne budete chcieť pri vytváraní profilu vybrať „Miestny súbor“ pre „Informácie o súbore -> Typ“. „Local File“ znamená, že súbor bude uložený do [Magento basedir]/var/export, ak exportujete údaje. Je dôležité, aby ste sa uistili, že súbor neexistuje, alebo aby ste manuálne zadali nový názov súboru pre každý export; niekedy má Magento problém s prepísaním existujúceho súboru, čo spôsobí záhadné chyby / zlyhanie exportu. Najlepšie urobíte, ak pre každý pokus použijete nový názov súboru.
Spustite profil buď pomocou vlastného skriptu (vo väčšine prípadov sa neodporúča alebo nie je potrebný, pokiaľ nie je spustený cez cron)
Keď DataFlow dostane požiadavku XML na import alebo export, pripojí sa buď k databáze v prípade exportu, alebo k externému zdroju dát v prípade importu a (po analýze, mapovaní a prípadne validácii) začne vytvárať výsledky (ktoré sa neskôr zapíšu do súboru alebo importujú do databázy) v nasledujúcich tabuľkách.
[sql]dataflow_batch_import
dataflow_batch_export[/sql]
Vyskytol sa problém s Magento, keď neskráti (nevyprázdni údaje z) tabuliek pred spustením importu / exportu. Navyše, ak máte v týchto tabuľkách alebo protokoloch ďalšie údaje, DataFlow sa dosť spomalí.
Tu je to, čo odporúčame na zrýchlenie DataFlow
- Prihláste sa do svojho Magento Dashboard (admin) a prejdite na Systém > Konfigurácia
- Prejdite na položku Rozšírené > Systém -> Čistenie denníka v bočnej ponuke
- Zmeňte „uložiť denník, dni“. Odporúčame 14.
- Vyberte možnosť „Povoliť čistenie denníka“
- Uistite sa, že váš crontab je správne nakonfigurovaný. Ak si nie ste istý, kontaktujte [email protected] alebo postupujte podľa tohto návodu: ( https://docs.nexcess.net/article/setting-up-a-cron-job.html )
Aby ste sa uistili, že sa záznamy vyčistia, spustite cron.php manuálne tesne pred importom načítaním http://yoursite.tld/cron.php alebo kdekoľvek sa nachádza cron.php (je vo vašom základnom adresári Magento) vo webovom prehliadači. Vo vašom prehliadači sa nezobrazí žiadny výstup, ale ak všetko prebehlo v poriadku, mali by ste dostať kód odpovede HTTP/200. - Stav exportu môžete skontrolovať vykonaním „SELECT COUNT(batch_export_id) FROM dataflow_batch_export“ v MySQL. Prípadne si môžete stiahnuť PHP skript nižšie a premenovať ho na “mage-dataflow.php” a nahrať ho do vášho základného adresára Magento a potom ho načítať do vášho webového prehliadača. Ukáže vám počet riadkov v tabuľkách importu a exportu. Keď sa riadky pri opätovnom načítaní stránky zvýšia, môžete vidieť, že sa spracovávajú ďalšie položky. Keď počet klesne späť na nulu, operácia toku údajov začala vypisovať súbor na export alebo import záznamov na import a mala by sa vykonať za menej ako 5 minút. Okrem toho vám stránka umožňuje skrátiť tabuľky stlačením tlačidla (UPOZORNENIE: Používajte iba vtedy, ak sa váš proces toku údajov zasekol! Proces toku údajov sa preruší).
[code language=”php”]
function emptyTables() {
// Analyzujte magento local.xml na získanie informácií o db, ak sa nájde local.xml
if (file_exists(‘app/etc/local.xml’)) {
$xml = simplexml_load_file(‘app/etc/local.xml’);
$tblprefix = $xml->global->resources->db->table_prefix;
$dbhost = $xml->global->resources->default_setup->connection->host;
$dbuser = $xml->global->resources->default_setup->connection->username;
$dbpass = $xml->global->zdroje->default_setup->pripojenie->heslo;
$dbname = $xml->global->resources->default_setup->connection->dbname;
}
inak {
exit(‘Nepodarilo sa otvoriť app/etc/local.xml’);
}
$conn = mysql_connect($dbhost, $dbuser, $dbpass) alebo zomrieť (‘Chyba pri pripájaní k mysql’);
mysql_select_db($názov databázy);
mysql_query(“SKRUHOVAŤ” . $tblprefix . “dataflow_batch_export”) alebo zomrieť (mysql_error());
mysql_query(“TRUNCATE ” . $tblprefix . “dataflow_batch_import”) alebo zomrieť (mysql_error());
}
// Získajte názov tohto skriptu
$myname = $_SERVER[“SCRIPT_NAME”];
// Skontrolujte, či skracujeme tabuľky
$p = $_REQUEST[‘clear’];
if ($p) {
emptyTables();
ozvena”
Tabuľky skrátené!
“;
}
// Interakcia DB
if (file_exists(‘app/etc/local.xml’)) {
$xml = simplexml_load_file(‘app/etc/local.xml’);
$tblprefix = $xml->global->resources->db->table_prefix;
$dbhost = $xml->global->resources->default_setup->connection->host;
$dbuser = $xml->global->resources->default_setup->connection->username;
$dbpass = $xml->global->zdroje->default_setup->pripojenie->heslo;
$dbname = $xml->global->resources->default_setup->connection->dbname;
}
inak {
exit(‘Nepodarilo sa otvoriť app/etc/local.xml’);
}
$conn = mysql_connect($dbhost, $dbuser, $dbpass) alebo zomrieť (‘Chyba pri pripájaní k mysql’);
mysql_select_db($názov databázy);
mysql_select_db($názov databázy);
$exportresult = mysql_query(“SELECT COUNT(batch_id) FROM ” . $tblprefix . “dataflow_batch_export”) alebo zomrieť (mysql_error());
$importresult = mysql_query(“SELECT COUNT(batch_id) FROM ” . $tblprefix . “dataflow_batch_import”) alebo zomrieť (mysql_error());
$numexportrows = mysql_fetch_array($exportresult);
$numimportrows = mysql_fetch_array($importresult);
$numexport = $numexportrows[0];
$numimport = $numimportrows[0];
// CSS pre NexStyle
ozvena
‘;
// Informácie o databáze, ktoré môže používateľ vidieť
ozvena
Predpona tabuľky: ‘ $tblprefix . ‘
‘
. ‘DB hostiteľ: ‘ $dbhost . ‘
‘
. ‘Používateľ DB: ‘ $dbuser . ‘
‘
. ‘Názov DB: ‘. $dbname . ‘
‘;
// Nastavenie tabuľky Export
ozvena”
Export
$numexport riadkov
Importovať
$numimport riadkov
“;
echo ”;
mysql_close($conn);
?>
[/code]