Migratie Übercart 2.x naar Drupal Commerce 1.x - Casussen

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

CMU: Laat maar zitten (feb. 2016)

Installatie & vereisten

  • Ik krijg voortdurend waarschuwingen omtrent afwezigheid Encrypt-module, maar dan moet je ook iets met PHP gaan hobbyen, en daar heb ik geen zin in
  • De huidige versie van de Commerce Migrate Übercart-module is 7.28. Er zijn grote verschillen tussen 7.1x en 7.2x. Documentatie van 7.1x is niet relevant voor 7.2x
  • When you are ready to begin click "register statically defined migrations" on migrate module's configuration page. [1]
  • Go back to the main migrate page and click the name of the commerce_migrate_ubercart group. Run the migrations in order, one-by-one. Grouped migrations can sometimes get wonky if you run them all at once. [2]

Je schijnt een bestaand content-type eerst te moeten verwijderen. Misschien README.TXT lezen?

Interface

  • Configuratie-pagina: Administration » Content » Migrate: Configure Ubercart Migration
  • Additionele configuratie-instellingen: Administration » Content » Migrate: Migrate
  • Uitvoeren: Administration » Content » Migrate: Configure Ubercart Migration: Dashboard

Foutmelding: Already an active process

De module heeft verschillende taken, waarvan CommerceMigrateUbercartCustomerBillingProfile er eentje is. Deze heb ik tot op heden nooit aan de praat gekregen. Voortdurend krijg ik deze foutmelding:

An AJAX HTTP error occurred. HTTP Result Code: 500 Debugging information follows. Path: /batch?id=7&op=do StatusText: 
Service unavailable (with message) ResponseText: MigrateException: There is already an active process on 
CommerceMigrateUbercartCustomerBillingProfile in MigrationBase->beginProcess() (line 912 of 
/var/www/example/sites/all/modules/migrate/includes/base.inc).

Ik zit welliswaar niet zozeer te wachten op de uitkomsten van deze taak, maar het lijkt een voorwaarde te zijn, voor de taak die betrekking heeft op de import van orders.

Task CommerceMigrateUbercartOrder

Gelukt! Zo'n 13.500 orders in 7 minuten, al zijn de orders wel allemaal leeg, en zonder bijbehorende klant. Misschien in combinatie met CommerceMigrateUbercartLineItem toepassen, oid?

Foutmelding: Unfulfilled depencencies: CommerceMigrateUbercartCustomerBillingProfile

Hele tekst van de foutmelding:

Skipped CommerceMigrateUbercartOrder due to unfulfilled dependencies: CommerceMigrateUbercartCustomerBillingProfile

Deze fout trad op bij starten van taak CommerceMigrateUbercartOrder. Dat heb ik niet eerder gehad. Ik kan deze foutmelding niet goed vermijden.

migrate_d2d & MCU: Onbeslist (feb. 2016)

Gebruikers migreren mbv. migrate_d2d

  • Migrate Commerce Übercart-module: 'It is probably a good idea to use migrate_d2d's "wizard" to create user and files migrations that run first, and then can be referenced as a "source migration" for the fields you add to preserve mappings to the old content as often these get new uid/fid/nids in the new system' - Al snap ik niet precies wat hier bedoeld wordt
  • Deze module doet 't super.

Orders migreren mbv. Migrate Commerce Übercart (MCU)-module

  • Installatie: drush en -y commerce_migrate_ubercart
  • Clear all caches
  • Voeg tweede database toe aan settings.php
  • Click "register statically defined migrations" on migrate module's configuration page
  • Configureer tweede database op Home » Administration » Content » Migrate: Configure Ubercart Migration
  • ...Allerlei onduidelijke foutmeldingen.

CMU: Juist volgorde van configureren? (mrt. 2016)

Installatie: Vereiste modules

Dit gaat eigenlijk vanzelf goed:

  • Commerce Migrate
  • Commerce Migrate Ubercart
  • Migrate
  • Migrate UI

Installatie: Eerst Migrate, dan Commerce Migrate Übercart-modole

Je moet dus eerst Migrate installeren. Dan pas CMU bron. Anders heeft CMU geen toegang tot de hooks van Migrate. Om de hooks en classes van Migrate beschikbaar te maken voor CMU: Clear cache.

Installatie: Versie?

Onderscheid tussen de 7.x-1.x- en 7.x-2.x-tak is van belang. Ihb. is het van belang om de juiste handleiding te gebruiken. De actuele versie is 7.x-2.2, en die gebruik ik

Installatie: Gebruikers moeten aanwezig zijn voor correcte relaties

De readme.txt is wat cryptisch:

You need to choose whether you're going to assign UIDs ownership on incoming
products, product display nodes, orders, and customer profiles. If you want
to do so, then the users need to exist in the system.
  • Uiteraard wil ik graag dat orders met de juiste gebruikers worden geassocieerd
  • Matching tussen gebruikers en orders, lijkt puur op UID te gaan. Het is dus belangrijk dat in het nieuwe systeem, dezelfde UID's worden gebruikt
  • Hoe dan ook: Eerst gebruikers importeren, dan pas overige objecten.

Installatie: Bestaande producttype verwijderen

Op de doelsite moeten bestaande producttypes verwijderd zijn 2:18. Ik geloof dat hiermee bedoeld wordt, dat het standaard-type verwijderd moet zijn

Installatie: Bestaande orders verwijderen, dan pas producten importeren

In het geval van rollback: Zorg dat er geen orders of orderregels aanwezig zijn, voordat je producten gaat importeren.

Installatie: Bestaande producten verwijderen, dan pas producten importeren

Anders gaat er ook iets mis tav. referentiële integriteit. Ik geloof dat cascaded deletion dan verkeerd loopt.

Installatie: Eerst producten importeren, dan pas orders & orderregels

  • Alle producten van alle product-types die voorkomen in de orders, moeten geímporteerd worden voordat orders geïmporteerd kunnen worden
  • Ik vermoed dat het verstandig is om producten te importeren via de CMU-module, en niet met bv. de migrate_d2d-module, om zeker te weten dat orders & producten correct met elkaar corresponderen

Installatie: Product_types moeten aanwezig zijn

Voor alle type producten die je installeert, moeten de bijbehorende producttypes aanwezig zijn. Anders zal de site daarom vragen

Installatie: Product display genaamd 'product_display' moet aanwezig zijn

Readme.txt:

You must have an existing Product Display content type named product_display.

Installatie: API-foutmelding

Drush zegt:

commerce_migrate_ubercart_migrate_api supports Migrate API version ,
Migrate module API version is 2 - migration support not loaded.

Bij eerdere casussen kreeg ik vergelijkbare meldingen via de webinterface. Op dit moment kan ik hier niet veel mee.

Installatie: Actie!

  • Alle content verwijderd. delete_allen Commerce Backoffice hadden er de grootste moeite mee
  • Bestaande Drupal Commerce-display-types verwijderd
  • Alle producten verwijderd mbv. Commerce Backoffice
  • Alle producttypes verwijderd (standaard + één voor dit project)
  • Brondatabase geconfigureerd in settings.php
  • Migrate » Configure Ubercart Migration: Brondatabase geconfigureerd
  • Migrate » Configure Ubercart Migration: Mapping naar UID aangevinkt
  • Migrate » Configure Ubercart Migration: katwijk ingevuld als machine name voor UID-identification (?)
  • Waarschuwing dat producttype product niet bestaat. Deze aangemaakt + aangevinkt dat bijbehorende display ook moet worden aangemaakt
  • Op pagina Migrate verschijnt nu groep Commerce Migrate Ubercart met zeven items. Als ik geen UID-mapping had aangevinkt, waren het er maar vier. Onder andere ontbrak iets met producten
  • Gepoogd om CommerceMigrateUbercartProductProduct aan de praat te krijgen → Foutmelding → Clear cache + reregister hooks.

Installatie: GetMap 200-foutmelding

Na starten CommerceMigrateUbercartProductProduct krijg ik foutmelding:

An AJAX HTTP error occurred. HTTP Result Code: 200 Debugging information follows. 
Path: /batch?id=11428&op=do StatusText: OK ResponseText: Fatal error: Call to a member 
function getMap() on null in /var/www/example.com/sites/all/modules/migrate/includes/migration.inc 
on line 1401

Suggesties:

  • Ik gebruik Migrate 2.8. Hier suggereert de auteur om versie 2.6 te gebruiken
  • Eerst Migrate enablen, dan pas Migrate Commerce Ubercart

Acties:

  • Alle Migrate-gerelateerde modules uitgezet
  • Handmatig Migrate-module verwijderd
  • Migrate geïnstalleerd: drush en migrate-2.6 (drush-loop)
  • Commerce Migrate geactiveerd (Migrate Extras ging vanzelf mee). Daarna Migrate UI
  • CMU aangezet
  • Probleem bleef.

Andere aanpak: Het viel me op dat je de complete configuratie van zo'n migratietaak kunt aanpassen. De velden die niet werden gemapped, daar verwijderd → Import van producten gelukt!

migrate_d2d: Gebruikers & UID's (26 mrt. 2016)

Dit is opnieuw een test: Kan ik gebruikers importeren? Blijven UID's intact? Is daar een mouw aan te passen? Gebruikers worden geïmporteerd mbv. migrate_d2d. Tot voor kort dacht ik dat import van gebruikers per se met CMU moet, maar dat maakt hoogstwaarschijnlijk niet uit.

Installatie

Installatie was inclusief CMU, wat hierna gebruikt gaat worden:

drush en -y migrate
drush en -y migrate_ui
drush en -y migrate_d2d
drush en -y migrate_d2d_ui
drush en -y migrate_extras
drush en -y commerce_migrate
drush cc all
drush en -y commerce_migrate_ubercart

Resultaten

  • Alle records zijn overgenomen, met één uitzondering: Het eerste beheer-account.
  • De UID's zijn niet overgenomen. Dat is begrijpelijk: Dit betreft een auto-incrementveld, en het kost nogal wat moeite om 'gaten' en dergelijke in de telling over te nemen. Maar kan ik orders nog wel importeren, of worden die nu naar de verkeerde eigenaars gemapped? Zie Commerce Migrate Übercart-module#Mapping UID's voor details.

Resultaten (2)

Toevallig moest ik dezelfde actie ook op een andere computer doen:

  • Vantevoren onduidelijke accounts verwijderd van de bronlocatie
  • Bron: 11764 records. UID's: 0, 1, 5, 6-11764. Alleen records 2-4 ontbreken
  • Doel: 11765 records. UID's: 0,1, 8-10, 15-?-11791. Er zitten meerdere gaten in met in totaal 26 records ofzo.

CMU: Producten (1 apr. 2016)

Deze casus borduurt voort op die van 26 maart 2016:

Producttypes

Migratie van producten (itt. displays) ging vrij simpel:

  • Zie Commerce Migrate Übercart-module » Taak CommerceMigrateUbercartProductProduct voor details
  • Een aantal producten werden drie keer geïmporteerd, en dat gaf aangepaste sku's, zoals 0100, 0100_1 en 0100_2. Het bleek dat de data ook drie keer op de bronlocatie staat. Gemakkelijkste oplossing: Data op de bronlocatie eerst opschonen.
  • Import via Drush:
    drush mi CommerceMigrateUbercartProductProduct
  • Waar zitten productafbeeldingen? Hoe fiets ik die over? → Ik denk in display.

Product-displays

De product-displays zijn de eigenlijke nodes:

  • Je moet een display hebben dat ook echt product_display heet

Orders gelukt! (2 apr. 2016)

  • CMU heeft de machine-naam van de migrate_d2d-gebruikersmigratietaak nodig. Daarom het hele proces opnieuw doorlopen
  • Bij voorkeur configuratie-instellingen in PHP vastleggen, en niet via de UI: Dat maakt het proces herhaalbaar

Gebruikersmigratie

Koud kunstje:

drush mi b755a3db1User
Encryption of secure migration information is not supported. Ensure the 
<a href="http://drupal.org/project/encrypt">Encrypt module</a> or 
<a href="mcrypt">mcrypt PHP extension</a> is installed for this 
functionality.

Processed 11749 (11747 created, 0 updated, 0 failed, 2 ignored) in 379.8 sec 
(1856/min) - done with 'b755a3db1User'         

De machinenaam van deze taak is uiteraard b755a3db1User.

Orders

  • De machinenaam ingevoerd ivm. mapping
  • Afhankelijkheden genegeerd: drush mi --force CommerceMigrateUbercartOrder - 0 orders verwerkt: De oude zaten nog in het systeem:
drush mi --force CommerceMigrateUbercartOrder
Encryption of secure migration information is not supported. Ensure the ... extension</a> 
is installed for this functionality.
Processed 0 (0 created, 0 updated, 0 failed, 0 ignored) in 7.2 sec (0/min) - done with 'CommerceMigrateUbercartOrder'     
  • Handjevol bestaande orders verwijderd. Opnieuw drush mi --force CommerceMigrateUbercartOrder - 0 orders verwerkt???
  • Clear cache + opnieuw → Weer 0 orders verwerkt → Geen verschil
  • Reregister statically defined classes + opnieuw → Geen verschil. Komt dit omdat de module heeft 'onthouden' dat-ie al een keer gemigreerd heeft?
  • Alle orders verwijderd: Volgende keer gewoon een database-backup klaar hebben liggen, want dit duurt veel te lang → Geen verschil
  • Rollback: drush mr CommerceMigrateUbercartOrder + opnieuw → Eindelijk doet-ie 't!

Gelukt!

Voor het eerst zijn orders geassociëerd met de juiste klanten. In detail:

  • Order-ID's zijn behouden
  • Klant-ID's zijn gewijzigd, maar da's geen probleem
  • Klanten-records zijn goed overgekomen, muv. taal: Default administration language, currently English en dat moet uiteraard Nederlands zijn, of nog beter: Meegemigreerd worden
  • Er zijn een hoop 'lege' accounts. Maar op de oude site kloppen er ook een hoop accounts niet: Vanaf Ordes zijn er klanten zonder Customer number.

Conclusie: Prima!

Rollback voor volgende iteratie:

drush mr CommerceMigrateUbercartOrder
drush mr --force CommerceMigrateUbercartProductProduct   # Zonder -force doet-ie 't niet
drush mr CommerceMigrateUbercartNodeProduct
drush mr b755a3db1User
drush mr b755a3db1Role 

Als een commando:

drush mr CommerceMigrateUbercartOrder && drush mr --force CommerceMigrateUbercartProductProduct && drush mr CommerceMigrateUbercartNodeProduct && drush mr b755a3db1User && drush mr b755a3db1Role

Zie ook