2011-08-17 8 views
1

heroku (테스트, 스테이지 및 프로덕션)에 3 개의 인스턴스가 있습니다. 실제 사용자의 데이터로 문제가 발생했는지 테스트하고 싶을 때 heroku db : pull -app production을 입력하고 heroku db : push -app test를하고 싶습니다. 문제는이 시점에서 heroku rake db : migrate --app test가 마이그레이션을 생성하려는 열이 이미 생성 되었기 때문에 오류가 발생한다는 것입니다.Heroku : 프로덕션 데이터베이스를 테스트하고 실행하는 데 마이그레이션을 수행 할 때 rake db : migrate

필자는 heroku db : push가 기존 데이터베이스 스키마로 데이터를 밀어 넣고 문자 그대로 전체 데이터베이스 (스키마 포함)를 푸시하지 않는다는 것을 이해합니다. 이것은 우리가 추진하고있는 스키마가 우리가 추진하고있는 마이그레이션 테이블보다 더 진보 된 것일 수 있습니다.이 마이그레이션 테이블은 우리가 가져온 데이터베이스에서 실행되지 않았지만 우리가 추진하고있는 데이터베이스에서 분명히 실행 한 마이그레이션 레코드가 누락되어 있기 때문입니다 .

첫 번째 질문은 이것이 어떻게 작동하는지에 대한 나의 올바른 견해입니까? 두 번째 질문은 프로덕션 데이터를 가져 와서이 오류를받지 않고 테스트를 수행하고 마이그레이션을 실행할 수 있도록이 문제를 해결하는 방법입니다. 이상적으로, 프로덕션 데이터베이스를 복사하여 테스트에 적용한 다음 완전히 마이그레이션하는 것이 좋습니다. 이렇게 할 수 있다면 기존의 테스트 스키마에 대해 걱정할 필요가 없기 때문입니다. 이것을 할 수있는 방법이 있습니까?

아니요 이미 테스트 데이터베이스에서 실행 된 각 마이그레이션에 대한 레코드로 새 마이그레이션 테이블을 채우면 마이그레이션이 이미 실행 된 것일 수 있습니다.

답변

5

아니요, db : push는 로컬 스키마와 데이터를 푸시합니다. Heorku의 빈 DB에 로컬 DB를 푸시 할 수 있습니다.이 방법은 사이트를 라이브로 만드는 방법입니다. 실행하면 스키마를 생성 한 다음 데이터를 밀어 넣습니다.

저는 이처럼 작동합니다 - Heroku의 테스트 환경 라이브 코드와 동일한 코드입니다. 주인의 한 지점 (즉, 살아있는 것과 시험하기 위해 밀린 것). 라이브에서 DB를 가져옵니다. 내 로컬 시스템에서 수정. 마이그레이션을 테스트하고 실행하려면이 버튼을 누릅니다. Heroku의 DB에 대한 테스트 릴리스. 테스트 코드를 마스터에 통합 한 다음 마이그레이션을 배포 및 실행하면 행복합니다. 미래의 버그에 대해 린스와 반복. 프로덕션 DB에는 테스트 할 수있는 고급 스키마 버전이 없어야합니다. schema_migrations 테이블을 보면 이것을 항상 확인할 수 있습니다. 레일스가 지금까지 어떤 마이 그 레이션을 실행했는지를 알기 때문에이를 db/migrations 파일과 비교할 수 있습니다.

+0

마치 heroku db : pull은 새로운 데이터를 기존 스키마에 그대로 꽂아 버립니다. 그래도 rake db가 실행될 때 : 로컬에서 마이그레이션하면 다음 오류가 발생합니다. 데이터베이스를 살펴보면 마이그레이션이 진행 중이며 아직 실행되지 않은 마이그레이션에서 생성 된 테이블이 있음을 알 수 있습니다. 스키마를 포함하여 전체 DB를 로컬로 가져오고 로컬에있는 모든 것을 덮어 쓰는 방법이 있습니까? SQLite3 :: SQLException : 테이블 "user_roles"가 이미 존재합니다 – user531065

+3

네, 당겨서 할 것입니다. 로컬에서 마이 그 레이션을 실행 한 다음 테이블에서 라이브를 가져 오면 로컬 데이터베이스가 먼저 지워지지 않으므로 user_roles 테이블은 로컬에 이미 존재하지만 schema_migrations 테이블은 실행 중이라고 생각하지 않으므로 가져온 후에 실행하십시오. 그 다음에, bam, error. 당신은 당신의 로컬 DB가 db : reset을 통해 완전히 비어있는 rake인지 확인하기를 원합니다. –

+0

완벽. 이것은 내 문제를 해결합니다. 고맙습니다! – user531065

관련 문제