Stworzylem sobie tabele w MySQL. rake db:schema:dump tworzy mi schema.rb, ktorego lepiej nie ladowac, bo pokasuje mi dane. Ale aby zachowac zgodnosc z z migracjami, chce dodac do metody self.up ladowanie danych. Dane zrzucilem do xml. I tu zaczynaja sie schody.
Nie wiem dlaczego Ruby jest chwalony za biblioteki XML. Moim zdaniem sa beznadziejne w porownaniu do tych co sa dostepne na Pythona. Proba uzycia SAX’a jest jakas metna. Dokumentacja to tragedia. Kompletnie brak przykladow! A jak probuje uzyc XPath to albo Ruby uzywa DOM albo ma jakis ciezki bug. Np. taki kod wykonuje sie wieki pozerajac przy okazji cala pamiec kompa. Tak sie zachowywac moze tylko DOM. Odbilo im, zeby to robic ta metoda? Nie mogli jakos zaimplementowac transparentnie SAX’a dla XPath?
Ktos ma moze jakis pomysl aby to bylo sprawniejsze? Chyba skonczy sie na tym, ze zablokuje w ogole w migracji tworzenie tych tabel lub bede to ladowal Pythonem.
A moze automatycznie zrzucic dane do YAMLa?
Moznaby sie nawet pokusic o serializowanie obiektow do YAMLa, pozniej ladnie obiektowo poprzepisywac odpowiednie pola do nowych obiektow (ze zmieniona struktura)?
Co do XML nie uzywalem nigdy w Rubym… stad nie wiem.
Chodziło mi o to, że gdybym cofnał się w migracji to bym skasował sobie tabele. Dlatego metoda up() poza (od)tworzeniem tabeli dodatkowo ładuje je danymi z pliku. Dzięki temu mogę wędrować sobie w górę i w dół historii zmian.
czyli pewnie masz też plik z danymi dla każdej wersji migracji? więc w metodzie up() możesz wywołać polecenie zewnętrzne, ładujące odpowiednią wersję danych (wcześniej zapewniwszy, że plik z danymi jest również w systemie kontroli wersji (-: ). pewnie można by to nawet do pewnego stopnia zautomatyzować (przerzucić ładowanie odpowiedniej wersji pliku z danymi na rake’a). wtedy pozostaje tylko dopilnowanie zrobienia odpowiednich zrzutów danych z bazy.
tak ja bym się w każdym razie do rzeczy zabrał, jakby mi umiejętności starczyło (-:
Serializujac obiekty do YAMLa i zapisujac je do pliku w down moznaby wszystko robic za pomoca rake migrate. Wczytujac obiekty w up jedynie co zostaloby do zrobienia to przepisanie odpowiednich atrybutow uwzgledniajac zmiany.
Nie testowalem tego ale nie widze przeciwskazan. Sam poki co w metodach up mam odpowiednie tworzenie testowych danych ale nie byly one zrzucane i jest ich niewiele (gora 3 na model).
Swoja droga mechanizm migracji jest absolutnie genialny.