2011-03-07 3 views
1

나는 마이 그 레이션 파일을 삭제했을 수도 있다고 생각합니다. 테이블을 많이 변경했기 때문에 꽤 많이 가지고 있습니다.내가 마이그레이션 파일을 삭제하면 영웅에게 영향을 미칩니 까?

이것이 내 heroku 배포에 영향을 주는지 궁금합니다. 내 heroku rake db:migrate은 정상적으로 작동했지만 이전에는 작동하지 않았습니다.

heroku도 테이블이 이미 존재하며 레이크 작업을 중단한다고 말합니다.

누락 된 마이그레이션 파일을 다시 작성해야합니까?

도움을 주셔서 감사합니다. 정말 고맙습니다.

+0

마이그레이션 파일을 절대로 삭제하면 안됩니다. 실수로 삭제하지 않으려면 버전 제어 시스템을 사용해야합니다. –

답변

6

아니요. 마이그레이션 파일 이름에 대한 날짜 스탬프가 무엇인지 알지 못하면 마이그레이션을 다시 작성할 수 없을 것입니다. db 폴더에서 마이그레이션 파일의 파일 이름을 보면 모든 파일에 날짜가 표시되어 있음을 알 수 있습니다.

이 datestamp는 실제로 쓰고있는 데이터베이스의 필드에 저장됩니다. 데이터베이스를 체크 아웃하면 'schema_migrations'테이블이 표시되고 이미 실행 한 모든 이전의 날짜 스탬프를 찾을 수 있습니다.

마이그레이션 파일을 계속 삭제하면 마이그레이션이 까다로운 작업입니다. 할 수 있으면 이전 마이그레이션을 삭제하지 않으려합니다. 특히 이미 데이터베이스에 푸시 된 경우 더욱 그렇습니다. 이미 데이터베이스에 푸시 한 경우 새 마이그레이션 파일을 만들어서 데이터베이스를 수정하는 대신에 쉽게 마이그레이션 할 수 있습니다. 이전 마이그레이션 및 리팩토링으로 되돌아갑니다. 이렇게하면 이런 식으로하려고 애쓰는 세상이 생깁니다.

이전에 마이그레이션을 시도하기 전에 heroku 데이터베이스를 로컬로 백업하십시오.

heroku db:pull 

당신은 이미 Heroku가 지점에 삭제 된 마이그레이션 파일을 밀어하지 않은 경우 당신은 당신 migrat를 해결 최초로에게 Heroku에서 마지막 마이그레이션을 압연 시도, 마지막 마이그레이션 파일을 재생하고 이온, 그것을 뒤로 밀고 다시 시도하십시오.

heroku rake db:rollback 

그런 방법으로 시도했지만 여전히 문제가 발생하는 경우 다음을 수행 할 수 있습니다. 그러나 경고해라!! 보고있는 오류는 이미 존재하는 데이터베이스에 테이블을 푸시하려고하기 때문입니다. 새 마이그레이션에 force => true 태그를 넣으면 효과적으로 데이터베이스에 푸시 할 수 있지만 실제로는 기존 테이블을 삭제하고 새 테이블을 만들어 이전 테이블의 데이터를 잃게됩니다. 그러나 문제가 없다고 확신하는 경우 마이그레이션을 수행 할 때 항상 다음과 같이 사용할 수 있습니다.

create_table "table_name", :force => true do |t| 
    t.column "name", :string.... 
+0

우수하고 깊이있는 대답. –

+0

게시물 주셔서 감사합니다! – hanumanDev

관련 문제