2013-09-05 10 views
0

현재 레거시 (Rails) 앱 데이터 스키마를 새로운 Rails 앱으로 재 설계하고 있습니다. 내가해야 할 일은 다음과 같습니다레이크 작업과 마이그레이션 (레거시에서 새 Rails 앱으로)

  • 1 마이그레이션 : 새로운
  • 을 추가, 여러 테이블에 새로운 필드를 만들
  • 1 레이크 작업 : 사용되지 않는 삭제 : 파견 유산은 새로 만든 테이블에 값이
  • 1 마이그레이션 필드 필드 필드를 삭제하려면 기존 테이블을 삭제하십시오.

실제로 작동하지만이 2 가지 마이그레이션과 레이크 작업을 하나의 스크립트로 "혼합"할 수 있습니까? 실제로 3 개의 스크립트를 하나씩 실행하는 것 외에 다른 해결책이 있습니까? (파견 작업은 최대 10 분 소요).

내가 이 되겠다.은 프로덕션으로 배포 할 때 하나의 명령 줄만을 "슛하고 잊어 버리는"것을 선호합니다. 예전 앱에서 새로운 앱으로 옮깁니다.

답변

0

레이크 작업의 복잡성에 따라 마이그레이션 파일 내에서 모든 작업을 수행 할 수 있습니다. 해당 열이 아직 존재하지 않으므로 실패 할 새로운 유효성 검사를 방지하기 위해 액세스해야하는 모델을 다시 정의하는 데 매우주의하십시오. 이에 대한 Google의 솔루션.

대신이 작업을 처리하는 중앙 레이크 작업에서 모든 것을 호출 할 수 있습니다. 내가 그걸 많이 좋아하는지 모르겠다.

레이크 작업이 데이터 일부를 이전하지 못하면 어떻게 될까요? 이전 필드를 삭제하는 마이 그 레이션을 실행하기 전에 모든 것이 제대로 작동하는지 확인해야합니다. 필요할 때

+0

동안 수행하는 하나의 레이크 db:migrate 명령이 필요합니다. 마지막으로이 플래그가 발생하지 않고 예외가 발생하지 않으면 필자는 필드 및 테이블 삭제를 수행합니다. – gbarillot

0

좋아, 결국 난 그냥 원시 SQL 문에서도를 사용하여 하나의 레이크 작업을 사용

dropped_fields = "ALTER TABLE `locations` DROP `name`, DROP.....;" 
ActiveRecord::Base.connection.execute(dropped_fields) 
0

난 당신이, 즉

  • 필드
  • 업데이트를 추가 세 가지 별도의 마이그레이션을 제안했다 데이터
  • 드롭 필드

두 번째 작업은 필요한 업데이트 만 수행하는 "데이터 전용"마이그레이션입니다. 이 작업은 성공/실패에 따라 올바른 방식으로 종료해야합니다. 실패/작동하는 경우 ActiveRecords Migrations 흐름 제어를 사용하여 올바른 작업을 수행해야합니다.

당신은 지금은 예외 플래그를 사용하여 레이크 작업에 따라 모든 것을 할, 당신은 데이터 검증에 대한 맞아 배포