2011-03-07 3 views
23

schema.rb에서 마이그레이션 파일을 생성하려고합니다. 그것은 가능한가?schema.rb에서 마이그레이션 파일 생성

나는 현재 많은 마이그레이션 파일을 가지고 있으며 모든 것을 하나의 마스터 마이그레이션 파일에 결합하려고합니다.

나는 어느 시점에서 실수로 마이그레이션 파일을 삭제했을 수도 있습니다.

도움을 주셔서 감사합니다.

+0

기술적으로 마이그레이션을 결합 할 수는 있지만 정말 나쁜 생각입니다.하지 마세요. 좋은 버전 제어 시스템을 사용하십시오. Git – Tilo

답변

17

이 작업을 수행 할 필요가 없습니다. 새로 설치하려면 rake db:migrate이 아닌 rake db:schema:load을 실행해야합니다. 그러면 스키마가 데이터베이스로로드되므로 모든 마이그레이션을 실행하는 것보다 빠릅니다.

절대 마이그레이션을 삭제해서는 안되며 마이그레이션하지 마십시오. 실수로 삭제 한 경우 version control system (예 : Git)을 사용해야합니다.

+5

이것이 나쁜 생각이라는 몇 가지 증거를 제공해 주시겠습니까? –

+0

@Tomek 마이그레이션 삭제/결합이 좋지 않습니까? 오래된 커밋을 삭제하고 싶지 않은 이유와 거의 같습니다. 마이그레이션은 데이터베이스의 내역을 제공합니다. 어쨌든 이유는별로 없습니다. 수백, 수백 개의 마이그레이션 작업을 수행 한 프로젝트에서 일했으며 일찍이 마이그레이션이 무너 지기도했습니다. 어쨌든 롤백 할 수있는 방법이 없었기 때문입니다. 그러나 그것은 내 결정이 아니었다. 내가 말했듯이 대부분의 경우 마이그레이션 병합에는 아무런 문제가 없습니다 (삭제는 절대해서는 안됩니다). –

+0

또한 Gordon은 아래 답변에서 응용 프로그램의 지연 상태로 인해 이전 마이그레이션이 손상 될 가능성이 있다고 말합니다. 대부분의 경우 마이그레이션에서 모델 사용을 최소화하고 그루터기를 스터핑하여 피할 수 있습니다. 사람들은 항상 마이 그 레이션에서 SQL을 사용하는 것을 두려워하는 것처럼 보입니다. 그러나 마이 그 레이션입니다! SQL은 응용 프로그램에 의존하지 않으므로보다 내구성이 있습니다. –

46

schema.rb를 복사하여 붙여 넣을 수 있으며 기존 데이터베이스가 실행되지 않도록 날짜를 변경 (예 : 날짜 변경) 할 수 있습니다. 이 마이그레이션을 만든 후에는 이전 마이그레이션을 모두 삭제할 수 있습니다.

나는 앤드류 (Andrew)와는 결코 마이그레이션을 삭제해서는 안된다는 점에 동의하지 않는다. 마이그레이션은 모델 클래스를 기반으로 예상치 않게 항상 중단되며이를 수정하는 것은 매우 사소한 일입니다. 버전 관리 기능을 사용하고 있다고 확신하기 때문에 필요할 때 언제든지 기록을 다시 볼 수 있습니다.

+6

마이 그 레이션은 모델 클래스에 의존해서는 안되며 모델 변경에 따라 시간이 지날수록 마이그레이션이 보장됩니다. 모델의 힘이 필요하면 마이그레이션 자체에 단순하고 일회용 인 모델 정의를 포함시킬 수 있습니다. –

+5

원칙적으로 좋지만 실제로는 시행하기가 어렵습니다. – ghempton

+0

OMG 사실입니다 !!!!! 감사! – gzfrancisco