2012-12-11 3 views
7

나는 수백 개의 마이그레이션이 축적 된 프로젝트에서 작업하고 있으며, 장기적으로 어떻게해야하는지 확신 할 수 없습니다. 나는 그들이 아무 것도 아프지 않다고 생각하지만, 증분 마이그레이션을 위해 많은 오래된 파일을 유지하는 것이 이상하게 보입니다. 그 중 일부는 나중에 제거되는 테이블을 만듭니다.장기 실행 프로젝트에서 레일스 마이그레이션 통합

  1. 가 그들을 내버려두고 :

    지금까지, 나는 세 가지 가능성을 보았다. 그들은 아무것도 아프지 않습니다.

  2. 그냥 삭제하십시오. 새로운 개발자는 아마도 마이그레이션이 아닌 스키마로드로 시작될 것이므로이 작업을 수행하는 데별로 해를 끼치 지 않습니다.

  3. 모두 삭제하고 이전 병합과 일치하는 타임 스탬프로 새 스키마를 만들고 스키마에서 새 병합을 만듭니다. 이것은 매우 깨끗해 보이지만, 누가 실제로 그것을 사용할지 확신하지 못합니다.

나는 그들을 삭제하려고하는데, 큰 함정이 있다면 나는 궁금해.

답변

2

개인적으로 나는 옵션 1로 기울어 져 있습니다. 일반적으로 어떤 프로젝트의 어느 시점에서 스키마는 중요한 것이며 마이그레이션은 단지 호기심에 불과하지만 상대방이 상처를 입지 않는다고 말하는 것은 맞습니다 아무것도. 이론적으로 이전 마이그레이션은 이전 시점으로 돌아가서 데이터베이스가 어떻게 구성되었는지를보고 싶어하는 사람에게 유용 할 수 있습니다.

삭제시 심각한 함정을 알 수는 없지만 새로운 마이그레이션을 편집 할 때 시간을 절약 할 수있는 시간을 절약하지 않는 한 이점이 없습니다.

스키마를 복제하는 단일 마이그레이션을 수행하는 노력이 도움이된다고 생각하지 않습니다. 이는 추가 작업이므로 스키마가 무엇인지에 대한 것입니다.

0

이전 프로젝트 중 하나에서 모든 마이그레이션을 삭제하고 수동 sql로 schema_migrations 테이블을 잘라내어 db/schema.rb 내용을 복사했습니다. 분명히이 마이 그 레이션은 돌이킬 수 없지만 수백 개의 오래된 가치없는 마이 그 레이션을 제거 할 수 있었지만 여전히 db 스키마가 아닌 마이 그 레이션에서도 db를 다시 생성 할 수있었습니다.

2

충분한 기간 동안 충분히 큰 프로젝트로 작업하는 경우, 모든 추가 마이그레이션을 경시하고 얼마나 많은 것이 존재하는지 궁금해 할 때가 올 것입니다.

당신은 자신을 "그냥 삭제하십시오 ... 그들은 을 수행하지 않습니다.을 수행하십시오." 이것은 완벽하고 논리적이며 일반적인 사고 방식입니다 (특히 Rails 개발자는 코드를 최소화하고 효율적으로 작업하는 것을 좋아합니다).하지만 어둠이 당신을 유혹하지 않도록하십시오.

마이그레이션을 삭제하면 응용 프로그램의 데이터 모델에 대한 기록 레코드가 삭제되고 현재 모델로 이동하는 데 걸린 논리 경로가 삭제됩니다. 이 역사는 왜 당신이 한 짓을했는지 기억하지 못하게하고,하지 않은 일을하지 않았습니다.

예, Google은 수시로 이전을 삭제했다고 유죄 판결을 받았습니다. 하지만 순 유익은 몇 킬로바이트와 깨끗한 마이그레이션 폴더 일 뿐이지 만 유혹에 저항해야합니다.

기억 : 마이그레이션을 삭제 한 사용자는 마이그레이션을 반복하도록 유죄 판결을받습니다.

+3

많은 마이그레이션이 전혀 확장되지 않습니다. 내역 기록이 필요하면 소스 제어 내역이 있습니다. – Spencer

5

내 의견으로는, 프로젝트의 모든 데이터베이스, 특히 프로덕션의 버전이 적어도 '201xxxxxxxx'이상이면 해당 버전보다 먼저 마이 그 레이션을 삭제해야합니다. 그들은 기술적으로 더 이상 필요하지 않습니다.

그런 다음 데이터베이스 기록으로 고고학을 연주하려면 버전 관리 시스템을 계속 사용할 수 있습니다. 커밋 식별, 또는

git log --name-only db/migrate/ #to list commit involving migrations + migration filename 
git show xxxxx db/migrate   #to see the code of commit xxxxx's migration(s) 

, 당신은 schema.rb의 저장소의 역사를 검색 할 수 및 해당 참조 :

힘내으로 예를 들어, 당신은 과거에 비해 빠른 모습을 가지고 다음과 같은 명령을 사용할 수 있습니다 위의 명령으로 마이그레이션 내용.

가볍게 db/migrate을 사용하고 버전 컨트롤을 사용하려는 경우 조금 정리를해야합니다.

당신은 그것을 찾아 쉽기 때문 직접 사용할 수있는 전체 이주의 역사를 가지고하는 것이 더 편리, 내가 주

옵션 1. 갈 것 찾을 경우이 된 마이그레이션이 이해가되지 않을 가능성이 높다 현재 응용 프로그램 코드로 예를 들어, 일부 마이그레이션은 더 이상 존재하지 않는 클래스 또는 메소드를 참조 할 수 있습니다. 버전 관리를 사용하여 마이그레이션이 작성된 시점에 응용 프로그램을 체크 아웃하면 혼동을 피할 수도 있습니다.

+0

+1 버전 제어. 이것이 프로젝트의 역사를위한 것입니다. – tristanm