Dlaczego moje Południowe migracje nie działają?

Najpierw tworzę swoją bazę danych.

create database mydb;

Dodaję "południe" do zainstalowanych aplikacji. Następnie przechodzę do tego tutoriala: http://south.aeracode.org/docs/tutorial/part1.html

Tutorial mówi mi, żebym to zrobił:

$ py manage.py  schemamigration wall --initial
>>> Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate wall
Świetnie, teraz migruję.
$ py manage.py migrate wall

Ale to daje mi ten błąd...

django.db.utils.DatabaseError: (1146, "Table 'fable.south_migrationhistory' doesn't exist")

Więc używam Google (co nigdy nie działa. stąd moje 870 pytań zadanych na Stackoverflow), i dostaję tę stronę: http://groups.google.com/group/south-users/browse_thread/thread/d4c83f821dd2ca1c

W porządku, więc postępuję zgodnie z tą instrukcją

>> Drop database mydb;
>> Create database mydb;
$ rm -rf ./wall/migrations
$ py manage.py syncdb

Ale kiedy uruchamiam syncdb, Django tworzy kilka tabel. Tak, tworzy tabelę south_migrationhistory, ale tworzy również tabele mojej aplikacji.

Synced:
 > django.contrib.admin
 > django.contrib.auth
 > django.contrib.contenttypes
 > django.contrib.sessions
 > django.contrib.sites
 > django.contrib.messages
 > south
 > fable.notification
 > pagination
 > timezones
 > fable.wall
 > mediasync
 > staticfiles
 > debug_toolbar

Not synced (use migrations):
 - 
(use ./manage.py migrate to migrate these)

Super....teraz każe mi je przenieść. Więc robię to:

$ py manage.py  migrate wall
The app 'wall' does not appear to use migrations.
/ Align = "left" / Dodam wall do początkowych migracji.
$ py manage.py schemamigration wall --initial

Then Migruję:

$ py manage.py migrate wall
Wiesz co? Daje mi to BS:
_mysql_exceptions.OperationalError: (1050, "Table 'wall_content' already exists")
Przepraszam, to mnie wkurwia. Czy ktoś może pomóc ? dzięki.

Jak uruchomić South i poprawnie zsynchronizować wszystko? Jedyne, co przychodzi mi do głowy, to usunięcie mojej aplikacji z INSTALLED_APPS, następnie uruchomienie syncdb, a następnie dodanie jej z powrotem.

To takie głupie.

Author: notbad.jpeg, 2011-01-29

6 answers

South umożliwia tworzenie migracji, gdy po raz pierwszy zaczynasz z nową aplikacją, a tabele nie zostały jeszcze dodane do bazy danych, a także tworzenie migracji dla starszych aplikacji, które mają już tabele w bazie danych. Kluczem jest wiedzieć, kiedy robić co.

Twoim pierwszym błędem było to, że usunąłeś migracje, jak tylko to zrobiłeś, a potem uruchomiłeś syncdb, Django nie wiedział, że chcesz, aby south zarządzało już tą aplikacją, więc stworzyło tabele dla Ciebie. Kiedy ty stworzył Twoje początkowe Migracje, a następnie uruchomił migrate, south próbował stworzyć tabele, które django już stworzył, a tym samym twój błąd.

W tym momencie masz dwie opcje.

  1. Usuń tabele dla aplikacji wall ze swojej bazy danych, a następnie uruchom {[0] } spowoduje to migrację i utworzenie tabel.

  2. Sfałszować początkową migrację $ py manage.py migrate wall 0001 --fake to powie south, że masz już tabele w bazie danych, więc po prostu udawaj, co doda wiersz do tabeli south_migrationhistory, aby przy następnym uruchomieniu migracji wiedział, że pierwsza migracja została już uruchomiona.

Tworzenie zupełnie nowego projektu i brak bazy danych

  1. Utwórz swoją bazę danych
  2. dodaj south do zainstalowanych aplikacji
  3. Uruchom syncdb, to doda tabele django i south do bazy danych
  4. Dodaj swoje aplikacje
  5. dla każdego uruchomienia aplikacji python manage.py schemamigration app_name --initial spowoduje to utworzenie początkowych plików migracji dla Twoja aplikacja
  6. następnie uruchom south migrate python manage.py migrate app_name spowoduje to dodanie tabel do bazy danych.

Tworzenie starszego projektu i bazy danych

  1. dodaj south do zainstalowanych aplikacji
  2. Uruchom syncdb, spowoduje to dodanie tabel południowych do bazy danych
  3. dla każdej uruchomionej aplikacji python manage.py schemamigration app_name --initial spowoduje to utworzenie początkowej migracji
  4. dla każdej z Twoich aplikacji uruchomionych python manage.py migrate app_name 0001 --fake, to będzie udawane, nie zrobi nic z bazą danych dla tych modeli, to po prostu dodaj rekordy do tabeli south_migrationhistory, aby przy następnym utworzeniu migracji, wszystko było ustawione.

Tworzenie starszego projektu i brak bazy danych

  1. Utwórz bazę danych
  2. dodaj south do zainstalowanych aplikacji
  3. dla każdej uruchomionej aplikacji python manage.py schemamigration app_name --initial spowoduje to utworzenie początkowej migracji
  4. Uruchom syncdb, to doda wszystkie aplikacje, które nie mają migracji do bazy danych.
  5. then run south migrate python manage.py migrate this will run all migracje dla Twoich aplikacji.

Teraz, gdy jesteś skonfigurowany z south, możesz zacząć używać south do zarządzania zmianami modeli w tych aplikacjach. Najczęstszym poleceniem do uruchomienia jest python manage.py schemamigration app_name migration_name --auto, które spojrzy na ostatnią przeprowadzoną migrację i znajdzie zmiany i zbuduje dla ciebie plik migracji. Następnie wystarczy uruchomić python manage.py migrate I zmienić bazę danych za Ciebie.

Mam nadzieję, że to pomoże.
 175
Author: Ken Cochrane,
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-10-17 14:05:44

Tak wszystko działa.

pip install South

# add 'south', to INSTALL_APPS, then
python manage.py syncdb

# For existing project + database
python manage.py convert_to_south app_name

# Thereafter, call them per model changes
python manage.py schemamigration app_name --auto
python manage.py migrate app_name

Bibliografia:

Http://garmoncheg.blogspot.com/2011/08/django-how-and-why-to-use-migrations.html http://www.djangopro.com/2011/01/django-database-migration-tool-south-explained/

 11
Author: CppLearner,
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
2012-01-03 19:05:26

Tutorial, którego używasz, stwierdza:

(jeśli to nie powiedzie się narzekać, że south_migrationhistory nie istnieje, zapomniałeś uruchomić syncdb po zainstalowane Południe .)

Zakładając, że twój post dokładnie opisuje kroki, które podjąłeś, podążając za tym linkiem, wydaje się, że przegapiłeś krok przed skonfigurowaniem nowej aplikacji. Jak postępujesz zgodnie z samouczkiem konfigurowania migracji w nowej aplikacji, Kolejność jest:

  1. Dodaj południe do INSTALLED_APPS.
  2. Run syncdb.
  3. następnie postępuj zgodnie z samouczkiem.

Czyli powinieneś już uruchomić syncdb przed dodaniem modeli do nowej aplikacji. Twoje rozwiązanie usuwania aplikacji z INSTALLED_APPS powinno zadziałać, ale warto zauważyć, że to naprawdę tylko "głupie" obejście, ponieważ przegapiłeś krok wcześniej. Gdyby syncdb został uruchomiony przed utworzeniem modeli dla tej aplikacji, nie musiałbyś korzystać z obejścia.

 8
Author: Andrew,
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-01-29 23:55:37

Just for future ref. Jeśli Południe daje Ci jakieś problemy:

  1. Usuń katalogi migracje z katalogów aplikacji
  2. Usuń Południe _migracje z bazy danych
  3. Run manage.py syncdb
  4. wróć do używania South (np. '. /manage.py convert_to_south coś, ./manage.py migrować ...')
 3
Author: Robert Johnstone,
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
2013-10-25 13:50:23

To wydaje się oczywiste, ale Gorąco polecam lekturę dokumentów.

Nawet po przeczytaniu odpowiedzi na to pytanie starałem się zrozumieć, jak efektywnie wykorzystać Południe.

Że wszystko się zmieniło oczywiście w dniu, w którym przeczytałem docs i Ty też powinieneś, południe jest prostsze w użyciu niż mógłbyś pomyśl.

Http://south.aeracode.org/docs/about.html

Http://south.aeracode.org/docs/tutorial/index.html

Http://south.aeracode.org/docs/convertinganapp.html#converting-an-app

Też uznałem to za przydatne:

Http://www.djangopro.com/2011/01/django-database-migration-tool-south-explained/

I upewnij się, że przeczytałeś artykuły Jeffa Atwooda o kodowaniu horrorów na temat kontroli wersji bazy danych.

 1
Author: Ashley Davis,
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
2012-03-15 22:45:08

Jak dostać się na południe do pracy i synchronizacji poprawnie ze wszystkim? Jedyny coś, co przychodzi mi do głowy, to usunięcie mojej aplikacji z INSTALLED_APPS, następnie uruchom syncdb, następnie dodaj go z powrotem.

Używałem tego rozwiązania z problemami Południa w przeszłości. Niezbyt ładne rozwiązanie, ale bardzo skuteczne;)

Ale głównym problemem jest to, że Twoje zamówienie nie jest poprawne. Powinieneś uruchomić syncdb przed samouczkiem. Niż działa prawidłowo.

 0
Author: Wolph,
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-01-29 23:58:14