Obecnie używasz Django "Evolution", czy "południe" jest lepsze i warte zmiany?

Obecnie używam Django evolutions do zarządzania ewolucjami bazy danych mojego produktu. Nie jest idealny, ale nauczyłem się żyć z jego wadami. Na przykład, zawsze muszę skopiować moją produkcyjną bazę danych do przetestowania przed przeniesieniem nowego schematu, ponieważ polecenie "evolve" nie zawsze może ewoluować bazy danych, która została zmieniona w kilku małych migracjach (w teście zrobiłem A->B->C, ale A->C nie będzie ewoluować poprawnie.)

Czy południe naprawi wszystkie te problemy? Czy warto się starać poznajesz nowe narzędzie?

Author: Mariusz Jamro, 2009-10-20

1 answers

[8]} właśnie zacząłem używać South, i jestem w 100% na nim sprzedany. Jest to również jeden z niewielu, który jest nadal w bardzo aktywnym rozwoju.

Południe powinno być w stanie poprawnie poradzić sobie z problemami, które opisałeś powyżej. Dla każdej zmiany db tworzy plik, który ma 2 metody " Foward "i " backward". Oto przykład automatycznie wygenerowanej migracji:

# > manage.py schemamigration issuetracker added-status-field --auto

# 0004_added-status-field.py
class Migration:

    def forwards(self, orm):

        # Adding field 'Issue.status'
        db.add_column('issuetracker_issue', 'status', orm['issuetracker.issue:status'])       

    def backwards(self, orm):

        # Deleting field 'Issue.status'
        db.delete_column('issuetracker_issue', 'status')

Kilka fajnych rzeczy w tym....

  • South pozwala na powrót do określonej migracji # if chciałbyś

  • Jeśli twój zakład produkcyjny jest na migracji 0002 i twój SVN commit jest na 0004, South zrobi 0003 następnie 0004, aby doprowadzić dB produkcji do prędkości.

  • Jeśli sam dokonałeś zmian, możesz powiedzieć południe, aby przeprowadziło "fałszywą" migrację. Normalnie system migracji rzuciłby hissy dopasowanie, ale to sprawia, że naprawdę łatwo jest mieć elastyczną kontrolę nad db.

    manage.py migrate [appname] --fake

  • Jeśli potrzebujesz czegoś niestandardowe się dzieje, jak np. kopiowanie danych w kolumnie do innej kolumny, Ponieważ pliki migracji są tylko plikami Pythona, można łatwo modyfikować funkcje do przodu/do tyłu.

  • Migracja na południe po wdrożeniu aplikacji była dość łatwa. Najnowsza wersja 0.6 Zawiera dla niej polecenie.

    manage.py convert_ to _south [appname]

  • I oczywiście, jak mógłbym zapomnieć, moją ulubioną funkcją jest automatyczne generowanie migracji pliki

    manage.py schemamigration [appname] [description] --auto


Gotchas

Pomyślałem, że powinienem dodać kilka wskazówek dotyczących błędów, które popełniłem, gdy zaczynałem z południem. Nie wszystko jest w 100% intuicyjne.

  • Po uruchomieniu polecenia convert_to_south w bazie danych deweloperskich, nie zapomnij uruchomić migrate --fake w bazie danych produkcyjnych, w przeciwnym razie South uzna, że jest nieaktualne.

  • Jeśli tworzysz nową aplikację, używasz --initial flaga

  • Przestań używać manage.py syncdb. Naprawdę.

  • Edycja modelu jest procesem 3-stopniowym --

    1.) Zapisz zmiany modelu

    2.) run schemamigration --auto

    3.) Uruchom migrate, aby zatwierdzić zmiany w bazie danych

Edit -- aby wyjaśnić poniższe uwagi, South zostało oficjalnie przegłosowane przez głównych współpracowników, aby nie zostać dołączonym do wersji 1.2. Było to po części dlatego, że autor południa zażądał, aby nie jeszcze być włączone. Mimo to, istnieje wiele wsparcia społeczności dla Południa, a niektórzy twórcy aplikacji wielokrotnego użytku zaczynają włączać migracje na południe za pomocą swojej aplikacji.

Edit # 2 -- zrobiłem kilka aktualizacji, aby odzwierciedlić nowy manage.py struktura dowodzenia z obecnej wersji trunku South. "startmigration "został podzielony na" schemamigration "i" datamigration " w zależności od tego, co robisz.

 52
Author: T. Stone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-02 09:58:41