Czasami zdarza się że nasza witryna szybko się rozwija i jej struktura szybko ulega zmianie. W takich przypadkach pojawia się potrzeba zmigrowania danych ze starej wersji strony do nowej. Wersje mojej strony różnią się na tyle że nie możliwe staje się wykorzystanie dump'ów mysql. Przed takim problemem byłem dzisiaj postawiony. Okazuje się że obecnie nie ma stabilnych modułów do migracji na Drupala 7. W D6 był świetny moduł deployment który dbał również o przeniesienie plików i nodów powiązanych, niestety nie jest dostępny w D7. Ostatecznie zdecydowałem się skorzystać z modułu node_export jako że posiada wersję dla D7. Moduł ów oferuje funkcję eksportu do kodu php, xmla, i zserializowanego obiektu. Oferuje również opcję importu z podanych formatów. Na pierwszy rzut oka wszystko działa dobrze, eksport i import działają. Problem pojawia się kiedy korzystamy z node_reference. Node export na chwilę obecną nie wspiera unikalnych identyfikatorów przez co wszystkie relacje się urywają. Istnieje bardzo dobry moduł do generowania unikalnych identyfikatorów uuid z tym że jego API jest jeszcze nie ustalone i ciągle się zmienia.
Na własne potrzeby dodałem na szybko obsługę uuid do node_export, i na jak narazie działa dobrze.
Eksportuję dane z poprzedniej wersji strony do postaci kodu php. Wyeksportowane dane zawierają unikalne identyfikatory dla nodów i pól typu node_reference.
Podczas importu szukam czy są już nody o danym uuid, jeśli tak to tylko je aktualizuję, jednocześnie wyszukiwane są nody odpowiadające referencjom. Dzięki temu cała struktura zależności zostaje zachowana.
Jeśli ktoś potrzebuje podobnego rozwiązania to może się zgłosić.
