2011-10-06 5 views
2

1 년 넘게 작성된 수십 개의 Rails DB 마이그레이션이 있습니다. 데이터베이스를 하나의 마이그레이션으로 집계하여 현재 존재하는 데이터베이스에 대한 전체 DDL 문을 볼 수 있습니까? 우리가 어떻게 얻었는지에 대한 모든 역사가없는 현재의 스냅 사진이 필요합니다.Rails의 전체 마이그레이션

답변

3

가능하지만 마이 그 레이션을 통합하는 것이 좋습니다.!

아마 질문 :

  • 을 왜이 작업을 수행 할 수 있습니까?
  • 얼마나 자주 VERSION = 0으로 마이그레이션 한 다음 다시 백업해야합니까?
  • 뭔가가 실제로 고장 났습니까? (그렇지 않다면 고치지 마라)

나는 한 번 같은 문제가 발생했다. 스키마를 변경하면 올바르게 마이그레이션되지 않기 때문에 마이그레이션 순서를 변경했다. 더 이상 내려. 나는 그것을 다시하는 것을 주저 할 것이다.

필드 또는 색인을 추가하는 마이 그 레이션이있는 경우 모델의 기본 마이 그 레이션과 결합 할 수는 있지만 은 더 이상 예전 상황을 재현 할 수 없음을 조심하십시오. 이전의 DB 덤프는과 호환되어야하는 이전 번호와 호환되지 않을 수 있습니다. 아마도 집계에 대한 가장 큰 인수 일 수 있습니다.

기술적으로 스키마를 덤프 한 다음 직접로드 할 수 있습니다 한 가지 방법 :

rake db:schema:dump 

다음 스키마 덤프 파일 DB/스키마의 내용으로 하나의 새로운 마이그레이션을 작성합니다.


P.S : 나는 그것이 유용 마이그레이션이 타임 스탬프를 사용하지 않는 이전의 마이그레이션 번호 매기기 방식을 고수하는 것으로 -이 더 잘 작동 나를 위해은 (어떤 순서 그들이 쉽게 볼 수있다).

당신의 설정/application.rb 파일 :

config.active_record.timestamped_migrations = false 
+0

자세한 답변을 보내 주셔서 감사합니다. 내가 원했던 바로 그 이유는 DB 스키마를 편리하게 볼 수있는 것이 었습니다. Rails는 많은 참조 용 RDBMS 작업 (예 : 참조 무결성, 제약)을 선호하기 때문에 한 곳에서 볼 수 있습니다. –

+1

'rake db : schema : dump'는 내가 필요한 것입니다. –

+0

도움이 되니 기쁩니다! – Tilo

2

DB에 현재 스키마를로드하기 만하면됩니다.

rake db:schema:load RAILS_ENV=[production, test, etc.]

이 스키마의 schema.rb 파일의 버전을하며, 각각의 마이그레이션을 실행하지 않고 DB에로드합니다.

참고 : 데이터를 DB에 저장하는 마이그레이션 (예 : 기본값)이있는 경우 해당 데이터는 DB에 추가되지 않습니다.

DB에 기본값을로드해야하는 경우 마이그레이션과 관계없이 사용자 정의 레이크 작업을 통해 더 잘 수행 할 수 있습니다.

2

당신은 결코 데이터베이스 및 실행을 얻기 위해 모든 마이그레이션을 사용해서는 안된다. 현재 schema.rb는 항상 DB가 '현재와 같이'보이는 것입니다.

만약 당신이 거기에 그들의 톤을 가지고 있다면 정기적으로 마이 그 레이션을 자르는 것이 좋습니다. 마지막으로 중요한 응용 프로그램이 schema.rb이므로 좋은 응용 프로그램 중 하나를 사용하여 폴더에서 50 개의 마이그레이션을 제거했습니다. 마이그레이션은 바로 으로 이동하여을 마이그레이션하고 데이터베이스의 기존 상태를 변경합니다. 그들은 한 번만 실행해야합니다.