2010-05-16 10 views
24

Ho utilizzato South per il mio progetto per un po ', ma di recente ho fatto un'enorme quantità di sviluppo e cambiato macchina di sviluppo e penso che qualcosa sia incasinato nel processo. Il progetto funziona bene, ma non posso applicare le migrazioni. Ogni volta che cerco di applicare una migrazione ottengo il seguente traceback:Errore di migrazione sud: eccezione NoMigrations per django.contrib.auth

danpalmer:pest Dan$ python manage.py migrate frontend 
Traceback (most recent call last): 
    File "manage.py", line 11, in <module> 
    execute_manager(settings) 
    File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 362, in execute_manager 
    utility.execute() 
    File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 303, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 195, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 222, in execute 
    output = self.handle(*args, **options) 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/management/commands/migrate.py", line 102, in handle 
    delete_ghosts = delete_ghosts, 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/__init__.py", line 182, in migrate_app 
    applied = check_migration_histories(applied, delete_ghosts) 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/__init__.py", line 85, in check_migration_histories 
    m = h.get_migration() 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/models.py", line 34, in get_migration 
    return self.get_migrations().migration(self.migration) 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/models.py", line 31, in get_migrations 
    return Migrations(self.app_name) 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/base.py", line 60, in __call__ 
    self.instances[app_label] = super(MigrationsMetaclass, self).__call__(app_label_to_app_module(app_label), **kwds) 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/base.py", line 88, in __init__ 
    self.set_application(application, force_creation, verbose_creation) 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/base.py", line 159, in set_application 
    raise exceptions.NoMigrations(application) 
south.exceptions.NoMigrations: Application '<module 'django.contrib.auth' from '/Library/Python/2.6/site-packages/django/contrib/auth/__init__.pyc'>' has no migrations. 

Io non sono quello sperimentato con il Sud e non ho incontrato questo errore prima. L'unica menzione utile che posso trovare online su questo errore è per il pre-0.7 Penso e sono su South 0.7. Ho eseguito 'easy_install -U South' solo per essere sicuro.

+0

Hai sincronizzato innanzitutto per garantire che le tabelle di southmigrationhistory siano presenti? O hai importato un db dump quando hai spostato la macchina? –

+0

Inoltre, django.contrib.auth non dovrebbe usare le migrazioni (a meno che tu non stia facendo qualcosa per hackerarlo da solo). Hai creato manualmente una directory di migrazione per contrib.auth? –

+0

Ho fatto un syncdb per cominciare. Il database è lo stesso database in cui utilizzo solo un database SQLite per lo sviluppo. Per il secondo punto, vedi la mia soluzione qui sotto. – danpalmer

risposta

26

Ho risolto il problema.

Ovviamente, non è possibile utilizzare South per eseguire le migrazioni per le app che fanno parte di Django, ad esempio "auth", quindi non sapevo perché lo stesse cercando.

Mi sono reso conto che per un po 'ho avuto un'altra app all'interno del mio progetto chiamato auth. Devo aver provato a migrare questo a un certo punto prima di ridenominarlo e quindi di incasinare tutto.

Ho rimosso le voci della cronologia di migrazione dal database per quell'app e tutto andava bene.

+0

ho avuto lo stesso problema ma con app commenti. Grazie. – zerofuxor

+0

Rannicchiato con l'app dei messaggi solo oggi. – Jyrsa

+1

È possibile utilizzare South per le app che fanno parte dell'autenticazione di Django, e talvolta ha senso. Si prega di vedere la mia risposta qui sotto. Non sono sicuro di cosa fare quando la risposta accettata non è corretta, forse puoi modificare la tua risposta per contenere la mia risposta corretta? – mrooney

43

Lasciando questo qui per i Googler futuri

Recentemente ho imbattuto in questo eccezioni con una delle mie proprie applicazioni oggi, non un contrib uno.

Dopo un po 'di testa-graffio ho notato che in qualche modo il file ...

app/migrations/__init__.py 

... erano stati cancellati, il che significa pitone sopraelevazione importare il dir come modulo ecc ecc

+2

Sì. Ha funzionato come un fascino. – mlissner

+2

Grazie, mi ha aiutato anche io. – akozin

+2

Per me era uno stato incoerente tra le migrazioni registrate nel database e la rimozione della directory 'migrations'. Aggiungendo un 'migrations' e il suo' __init __. Py' ha risolto il problema. – gipi

1

Ho anche avuto lo stesso problema, tuttavia questo è successo all'applicazione root. Ho scoperto che questo era dovuto a un vuoto models.py nella mia radice del progetto dallo sviluppo precedente. Sospetto che questo problema possa sorgere anche per le applicazioni di progetto.

1

È possibile eseguire migrazioni su moduli incorporati e ha sicuramente senso per le migrazioni dei dati, ad esempio, il troncamento di tutti i nomi utente, la rimozione di e-mail non valide, eccetera.

Nel caso di un utente da django.contrib.auth.models, è sufficiente utilizzare: orm [ 'auth.User']

5

Ho anche avuto lo stesso problema, e alla fine ho risolto questo eliminando tutte le righe dalla tabella south_migrationhistory ed eseguire il seguente comando dal terminale.

python manage.py reset south 

Questo answer spiegare su come reimpostare la storia della migrazione sud.

Edit:

Da Django 1.5 in poi reset comando non funzionerà. Invece devi usare flush.

python manage.py flush 

Per capire di più su ciò che a filo farà leggere questo stackoverflow answer.

+1

Nota il comando "reset" è stato sostituito con "flush" in Django 1.5, sebbene flush non funzioni con le singole tabelle. Per questo è necessario utilizzare questa porta del vecchio ripristino: https://github.com/gregmuellegger/django-reset – shacker

0

Ho ricevuto lo stesso errore, ma non per un modulo django, ma per un modulo che faceva parte del mio virtualenv. Non ho capito in che modo il sud avrebbe potuto effettuare una migrazione per quel modulo, dato che in realtà non aveva alcuna migrazione. Poi mi sono ricordato di aver copiato il database da un env di test che doveva essere lo stesso. Ma si è scoperto che l'altro env aveva una versione leggermente diversa del modulo che ha avuto una migrazione. Ho finito per cancellare la riga incriminata dalla migrazione meridionale (poiché era comunque un test).

10

Ho appena incontrato questo dopo swithcing rami e le versioni delle applicazioni, e ha deciso di rimuovere l'applicazione che ormai non aveva le migrazioni dal tavolo south_migrationhistory

./manage.py dbshell 

mysql> SELECT * FROM south_migrationhistory WHERE app_name = 'social_auth'; 

104 | social_auth | 0001_initial...                 
105 | social_auth | 0002_auto__add_unique_nonce... 


mysql> DELETE FROM south_migrationhistory WHERE app_name = 'social_auth'; 
Query OK, 2 rows affected (0.00 sec) 
+0

Questa è anche una soluzione rapida per quando si desidera eliminare solo una singola migrazione di app invece di resettare/arrossendo tutto il sud. – andyzinsser

+0

Impressionante questo ha risolto il mio problema, anche se non sono l'OP hehe cheers – NeoVe

0

Ho avuto un problema simile con django.contrib.admin non lasciandomi gestire le mie migrazioni. Ho risolto il problema disabilitando django.contrib.admin nelle impostazioni.INSTALLED_APPS

Problemi correlati