2011-06-13 9 views
10

Soy nuevo en South Así que me pregunto si alguna vez tengo que llamar¿Debo llamar syncdb antes o después de migrar Sur

./manage.py syncdb 

o haciendo

./manage.py schemamigration appname --auto 
./manage.py migrate appname 

es suficiente en todos cases South can handle on its own.

+0

Tuve esta misma pregunta después de leer los documentos del sur. Son buenos, pero una explicación más clara de esta relación definitivamente no estaría fuera de lugar. – markdsievers

Respuesta

21

El sur no abarca todo el proyecto. Es una aplicación amplia.
Algunas aplicaciones usan sur, algunas aplicaciones no lo usan.

si una aplicación se integra al sur, para hacer db cambia va a utilizar

./manage.py schemamigration appname --auto 
./manage.py migrate appname 

pero no todas las aplicaciones se integran con el sur.

Cuando agrega una nueva aplicación que no utiliza el sur de su proyecto, necesita llamar al ./manage.py syncdb para estas aplicaciones. (Por ejemplo, django.contrib aplicaciones)

En resumen, el uso ./manage.py syncdb cuando una aplicación no hace uso sur, y ./manage.py migrate para sur integrada aplicaciones.

+0

Gracias por una explicación clara. Edité tu respuesta para agregar algún formato. –

+3

Encontré el comportamiento sur confuso hasta que me di cuenta de que South cambia el comportamiento syncdb. Una vez instalado, syncdb no funciona en las aplicaciones administradas por South. Entonces puede ejecutar syncdb en un sitio incluso si tiene algunas aplicaciones administradas por el sur. Debe tener cuidado cuando instale por primera vez en el sur que el syncdb y las migraciones iniciales son consistentes, pero una vez que lo haya hecho, es muy tolerante a errores. – Nils

+1

Algo a tener en cuenta es que las migraciones al sur se ejecutan antes de que se cargue cualquier accesorio para la aplicación. Me acabo de encontrar con esto, porque estaba tratando de ejecutar una migración de datos que suponía que las filas en el accesorio initial_data.json ya se habían cargado. – tobych

8

Al crear o instalar un nuevo MiApl aplicación, primero debe ejecutar los siguientes comandos:

./manage.py schemamigration MyApp --inital 
./manage.py migrate MyApp 

Después de que cada vez que se ejecuta ./manage.py syncdb verá:

Syncing... 
Creating tables ... 
Installing custom SQL ... 
Installing indexes ... 
Installed 0 object(s) from 0 fixture(s) 

Synced: 
> south 
> django.contrib.auth 
> django.contrib.contenttypes 
> django.contrib.sessions 
> django.contrib.sites 
> django.contrib.messages 
> django.contrib.staticfiles 
> django.contrib.admin 
> django.contrib.admindocs 

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

Se puede ver que manage.py syncdb es capaz de diferenciar entre aplicaciones administradas por South (sección Not synced) y aquellas no administradas por South (sección Synced). También le recuerda usar ./manage.py migrate.

El punto importante es dejar Sur gestionar una nueva aplicación mediante la ejecución de ./manage.py schemamigration MyApp --inital y ./manage.py migrate MyAppantes de la ejecución de./manage.py syncdb.

Cuestiones relacionadas