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

Uit De Vliegende Brigade
Versie door Jeroen Strompf (overleg | bijdragen) op 1 apr 2016 om 17:06 (Nieuwe pagina aangemaakt met '== CUM: Laat maar zitten (feb. 2016) == === Installatie & vereisten === * Ik krijg voortdurend waarschuwingen omtrent afwezigheid Encrypt-module, maar dan moet je...')
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Naar navigatie springen Naar zoeken springen

CUM: 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.

Casus 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!