2013-06-15 5 views
2

새로운 개발 환경에 프로젝트를 배포하고 있습니다. 내가 남쪽을 사용하고 있습니다으로Django - syncdb 및 South 배포

은 내가 그랬어 :

$ python manage.py syncdb --all 
$ python manage.py migrate --fake 

내가 모델의 실제 상태를 적용 할 syncdb --all을 사용했다.

그런 다음 migrate --fake으로 마이그레이션 된 모든 모델을 표시하십시오.

그러나 그 이후

내 모델은 마지막 버전 내가 잘못 뭐하는 거지 (없는 필드)

에 있지?


모든 수정 내용이 마이그레이션되어 있다고 가정합니다.

내가 할 경우

$ python manage.py syncdb 
내가 남 (즉이 예상되는) 사용할 때 이후 처음 상태를 만들 것으로 보인다


그러나

$ python manage.py migrate 

이미

을 만들었 나타납니다 일부 테이블을
+0

누락 된 앱에 마이그레이션이 있습니까? 실종 된 필드에 대한 마이그레이션이 있는지 확인할 수 있습니까? 'syncdb'를 실행하고 나중에 '진짜'마이그레이션을한다면 그것은 효과가 있습니까? –

+0

질문 업데이트 –

+0

죄송합니다. 의미하는 것은'syncdb'를 전혀 실행하지 않고 migrate를 사용하는 것입니다. 그게 효과가 있니? –

답변

2

가, 최근에 내 응용 프로그램을 다시 배포하는 데 제 경우

$ python manage.py syncdb --all 
$ python manage.py migrate --fake 

에 대해 잘 했어야, 내가 직면 같은 문제.
난 그냥 내가 분명히 단순히 & 그런 다음 전체 데이터베이스 배포를 재실행

0001_initial.py 
0002_auto__add_field_mytable_myfield.py 

을 이름 변경, 삭제

0001_initial.py 
0002_initial.py 
0003_auto__add_field_mytable_myfield.py 

문제 (원인을 잊고되지 않은 모델에 대한 이중 초기 마이그레이션을 한 것으로 실현 다른 호스트에서 이미 적용된 마이그레이션을 업데이트하십시오.)

1

--fake 옵션은 새 마이그레이션을 만들려고 할 때 오류를 방지하지 않습니다. 이전이 적용되었음을 기록합니다. without actually applying them.

또한 찾고있는 것을 얻기 위해 --ignore-ghost-migrations 또는 --delete-ghost-migrations이 필요합니다. ./manage.py dbshell

    • 이동 : 이미 복구, --fake를 실행 한 경우

      는이 작업을 수행 할 수 있습니다, 지금 convert the app

      에 먼저 필요, south에 기존 프로젝트를 변환하려면 DELETE FROM south_migrationhistory 어디에서 id> 0; // 그러면 테이블에이 모두 삭제됩니다.

    특정 응용 프로그램의 마이그레이션을 제거하려는 경우, 사실이

    DELETE FROM south_migrationhistory WHERE app_name = 'blah' 
    
  • +0

    감사합니다. 문서에서'--ignore-ghost-migrations' &'--delete-ghost-migrations'을 검사 할 것입니다. 나는 현재 이미 많은 마이그레이션과 함께 south를 사용하고있는 프로젝트를 위해 새로운 dev 환경을 배치하려고하고있다. 그래서 내 응용 프로그램은 이미 southed, 나는 신선한 새로운 데이터베이스에서 시작 해요 –

    +0

    그래서 당신이 당신이 무엇을 찾고 있었는지 알아 냈어? – karthikr