2013-02-19 2 views
11

배경 존재 : 내 프로젝트에 djangoratings를 추가 한 후 을, 나는 schemamigration에 대한 알 수없는 명령 오류가 발생 사우스 마이그레이션 오류가 관계가 이미

django-admin.py schemamigration djangoratings --initial 
--settings=myapp.settings.local 

를 실행 해 보았다. PYTHONPATH에 프로젝트 디렉토리를 추가하여이 오류를 해결하려고했습니다 (virtualenv 및 virtualenvwrapper를 사용하고 있습니다). 이것은 schemamigration에 대한 알 수없는 명령 오류를 해결했지만 PYTHONPATH에 대한 프로젝트 디렉토리 위에 하나의 디렉토리를 지정한 것으로 생각하고 djangoratings에 대해 초기 마이그레이션을 실행했을 때 whoosh와 관련이 있다고 불평합니다 (프로젝트에서 사용하고 있습니다).). 나는 PYTHONPATH 디렉토리를 바꾸고 실행을 시도했다.

django-admin.py schemamigration djangoratings --initial 
--settings=myapp.settings.local 

다시. 그런 다음 마이그레이션 명령을 실행했습니다.

django.db.utils.DatabaseError: relation "djangoratings_vote" already exists 

내가 사용 다시 모든 방법을 마이그레이션하려고 : 이것은 내가 오류 받았을 때입니다 다시 --initial

django-admin.py migrate djangoratings zero --settings=myapp.settings.local 
Running migrations for djangoratings: 
- Migrating backwards to zero state. 
< djangoratings:0006_add_cookies 
< djangoratings:0005_add_exclusions 
< djangoratings:0004_rethink_recommendations 
< djangoratings:0003_add_correlations 
< djangoratings:0002_add_mean_and_stddev 
< djangoratings:0001_initial 

을하고 실행을,하지만 같은 오류가 마이그레이션 명령을 수행 한 후 발생했습니다.

내 데이터베이스의 테이블 목록을보고 djangoratings_vote를 찾지 못했습니다. djangoratings에 대한 목록

나의 현재 마이그레이션은 다음과 같습니다

0001_initial.py     0006_add_cookies.py 
0001_initial.pyc     0006_add_cookies.pyc 
0002_add_mean_and_stddev.py  0007_initial.py 
0002_add_mean_and_stddev.pyc  0007_initial.pyc 
0003_add_correlations.py   0008_initial.py 
0003_add_correlations.pyc   0008_initial.pyc 
0004_rethink_recommendations.py 0009_initial.py 
0004_rethink_recommendations.pyc 0009_initial.pyc 
0005_add_exclusions.py   __init__.py 
0005_add_exclusions.pyc   __init__.pyc 

어떻게 관계 "djangoratings_vote"이미 오류 존재를 해결할 수 있습니까? 가급적 남쪽을 사용합니까?

답변

13

남쪽이 데이터베이스와 동기화되지 않은 것처럼 들립니다 (남쪽이 테이블을 만들었지 만 이전 마이그레이션을 완료 할 수 없으면 실패 할 수 있음). 수동으로 데이터베이스를 복원하고 다음과 같이 남부를 복원하는 것이 좋습니다. 실수시 데이터베이스를 백업하십시오.

  1. 데이터베이스에서 모든 djangoratings_ * 테이블을 삭제하십시오.
  2. 데이터베이스에서 south_migrationhistory 테이블을 열고 앱 이름별로 필터링하십시오. djangoratings에 대한 모든 항목을 제거하십시오.
  3. djangoratings/migrations 디렉토리에있는 모든 마이그레이션 파일을 삭제하십시오.

이 작업을 완료하면 깨끗한 데이터베이스와 남쪽 기록이 있어야합니다. 이 시점에서 다음을 실행하십시오.

./manage.py schemamigration djangoratings --initial 

단일 마이그레이션 파일을 생성합니다. 그런 다음 :

./manage.py migrate djangoratings. 

는 장고 등급을 사용할 준비가 그래서 당신은 당신이 처음이 있었다 오류가이 데이터베이스를 설정해야하지 않는다는 것을 가정.

+1

고마워! 문제없이 마이그레이션 명령을 수행 할 수있었습니다. 데이터베이스에 djangoratings 테이블이나 djangoratings 항목이 없으므로 마이그레이션 파일을 삭제해야했습니다. – Derek

+0

아무 문제 없어, 다행이었습니다. –

+0

나는 똑같은 문제가 있지만 새로 생성 된 데이터베이스에있다. 마이그레이션을 삭제하고 데이터베이스를 지우고 남쪽을 다시 설치했으나 아무 것도 변경되지 않았습니다. 문제를 해결하는 방법에 대한 아이디어가 있습니까? – SuburbanFilth

23

를 해결하기 위해 더 나은 방법이있다 : 다음

python manage.py migrate djangoratings --fake 

과 :이 예상대로 잘 작동하지 않는 경우

python manage.py migrate 
+2

이것은 Django 1.8에서 South 없이도 작동합니다. – aralar

1

이 @의 stef_huayue의 대답의 확장에있다가.

어떤 이전이 실패했는지 확인하십시오. coresponding migration_file.py는 일반적으로 migrations.AddField 작업이 발생한 위치입니다. 그런 다음 실행하십시오 : python manage.py migrate app_name --fake [migration_file]

파일 확장명없이. 뒤이어 :

python manage.py migrate app_name

관련 문제