2009-07-29 2 views
1

나는 (현재) Rails 개발자가 아니므로이 점에 대해 잘 모르는 부분을 용서해주십시오.Migration Script는 Rails 2.1 이상에서 어떻게 적용됩니까?

내가 항상 레일즈에 대해 좋아했던 한 가지 사항은 마이그레이션과 이것이 모든 언어와 플랫폼에서 공통적 인 필요를 채우는 방법입니다. 이 말을 듣고, 2.1에서 변경 한 내용으로 어떤 시나리오가 발생할 것인지 이해하고 싶습니다.

레일 2.1 이상에서는 마이그레이션 논리에 두 가지 변경 사항을 적용했습니다. 첫 번째는 소스 제어에 파일을 추가하기 전에 동일한 파일에서 동시에 2 명의 개발자가 작업 할 확률을 줄이기 위해 생성시 타임 스탬프 기반 스크립트 이름을 사용하는 것이 었습니다. 따라서 002_test.rb 대신 스크립트가 생성 될 때 20090729123456_test.rb가됩니다.

두 번째 항목은 Schema_Info 테이블이 최신 버전 번호뿐만 아니라 마이그레이션 목록을 제공하는 Schema_Migrations 테이블로 대체되었습니다.

레일스 소스를 살펴보면 Schema_Migration 테이블에있는 최대 버전으로 스키마의 "현재 버전"이 필요하다는 것을 알았습니다.

여기에 내가 알아 내기 위해 노력하고있어 시나리오는 다음과 같습니다

개발자 A는 새로운 스크립트를 생성합니다 20090729120000_test.rb.

개발자 B는 새 스크립트 인 20090729130000_test.rb를 생성합니다.

개발자 B는 먼저 버전 번호를 지정하지 않고 개발자 A의 스크립트가 아직 추가되지 않았다고 가정하여 스크립트를 데이터베이스로 마이그레이션합니다.

개발자 A가 스크립트를 추가하고 스크립트 버전 (타임 스탬프 기준)이 현재 적용된 버전보다 적기 때문에 어떤 일이 발생합니까?

답변

1

나는 긍정적 이진 않지만 개발자 B 이전을 취소 한 다음 "rake db : migrate"를 실행하여 올바른 순서로 둘 다 수행해야한다고 생각합니다. . 물론 두 개발자가 서로 통합 할 필요가없는 테이블에서 독립적으로 작업하는 경우 (이 경우에 개발자 B는 개발자 A가 자신의 마이그레이션을 기다릴 필요가 없기 때문에) 개발자 A는 개발자 B의 이전 타임 스탬프이며 올바른 순서로 다시 진행됩니다.

0

짧은 대답은 다음과 같습니다. 걱정하지 마십시오.

rake db : migrate는 schema_migrations 테이블에서 찾을 수없는 마이그레이션을 실행하려고 시도합니다. 이미 실행 된 최신 마이그레이션이있는 경우 중요하지 않습니다.

B가 A에 종속되어 있고이 순서대로 실행해야하는 경우 문제가있을 수 있지만 이는 개발자 간의 문제입니다.