Rails 3에서 마이그레이션 파일을 삭제하는 방법


109

마이그레이션 파일을 제거 / 삭제하고 싶습니다. 어떻게할까요? 여기에 비슷한 질문이 있다는 것을 알고 있지만 업데이트로서 스크립트 / 파괴를 수행하는 것보다 더 좋은 방법이 있습니까?

또한, 나는 어떻게해야 db:reset하거나 db:drop내가 제거하면 / 마이그레이션을 삭제 하시겠습니까?

답변:


142

나는 보통:

  1. rake db:migrate VERSION=XXX모든 환경에서 삭제하려는 이전 버전으로 수행하십시오 .
  2. 마이그레이션 파일을 수동으로 삭제하십시오.
  3. 보류중인 마이그레이션이있는 경우 (즉, 제거한 마이그레이션이 마지막 마이그레이션이 아님) rake db:migrate다시 새로 수행 합니다.

애플리케이션이 이미 프로덕션 또는 스테이징중인 경우 테이블 또는 열을 파괴하는 다른 마이그레이션을 작성하는 것이 더 안전합니다.

마이그레이션에 대한 또 다른 훌륭한 참고 자료 : http://guides.rubyonrails.org/migrations.html


2
마이그레이션을 삭제 한 다음 db : migrate를 실행하면 생성 된 테이블이 지워 집니까?
alvincrespo 2010 년

2
아니요, Rails는 삭제 방법을 모르기 때문입니다. self.down데이터베이스를 "다운 그레이드"하려면 마이그레이션에 정의 된 메서드 를 호출 해야합니다.
Fábio Batista

35
파일을 이미 삭제 한 경우 레일이 쉽게 놓이지 않는다는 사실을 깨닫지 못한 채 rake db:migrate:status누락 된 파일의 ID를 표시하여 파일을 다시 만드는 데 사용할 수 있습니다. 돌아 오면 승리에 대한이 답변의 조언을 따를 수 있습니다.
Jordan Feldstein 2011 년

1
@JordanFeldstein, 감사합니다. db:migrate:status생명의 은인입니다!

1
@Lucas, 마이그레이션 파일이 제거되면 더 이상 되돌릴 수 없습니다. 따라서 파일을 삭제하기 전에 이미 실행 된 모든 환경 (프로덕션, 개발, 테스트, 스테이징 등)에서 파일을 되돌려 야합니다. 그렇기 때문에 이미 프로덕션에서 실행 된 경우 이전 마이그레이션을 되돌리려면 다른 마이그레이션을 만드는 것이 더 안전하다고 썼습니다.
Fábio Batista 2013

68

마이그레이션을 삭제하는 또 다른 방법 :

$ rails d migration SameMigrationNameAsUsedToGenerate

rake db:migrate데이터베이스의 변경 사항이 영원히 유지되기 때문에 실행되기 전에 사용하십시오. :)-또는 수동으로 변경 사항을 제거하십시오.


3
"애플리케이션이 이미 프로덕션 또는 스테이징중인 경우 테이블 또는 열을 파괴하는 다른 마이그레이션을 작성하는 것이 더 안전합니다." 따라서 변경 사항은 데이터베이스에 영구적으로 유지되지 않습니다
JohnMerlino 2013

8
그런데 "d"는 "파괴"를 의미합니다.
Greg M. Krsak 2014

21

앱의 홈 디렉토리에서 아래 명령을 실행하십시오.

  1. rake db:migrate:down VERSION="20140311142212" (여기서 version은 마이그레이션이 생성 될 때 rails 앞에 붙인 타임 스탬프입니다.이 작업은이 마이그레이션으로 인한 DB 변경 사항을 되돌립니다.)

  2. Run "rails destroy migration migration_name"(migration_name은 마이그레이션을 만드는 동안 선택한 용도입니다. 가져 오려면 마이그레이션 파일 이름에서 " timestamp_ "를 제거하십시오. )


레이크 파괴 마이그레이션 AddFileToTable 레이크 중단! 'destroy'작업을 빌드하는 방법을 모릅니다 (--trace를 사용하여 작업을 실행하여 전체 추적보기)
sadaf2605

3
# 2의 경우 올바른 명령은 다음과 같습니다.rails d migration migration_name
mauriciomdea 2015 년

1
내가 필요로하는 "remove timestamp_"힌트에 감사드립니다
LightMan

10

다음과 같이 다운 마이그레이션을 실행할 수도 있습니다.

rake db:migrate:down VERSION=versionnumber

자세한 내용은 마이그레이션에 대한 Ruby on Rails 가이드 를 참조하세요.


9

우리는 사용할 수 있습니다.

$ rails d migration table_name  

마이그레이션이 삭제됩니다.


1
나는 모델 이름이 아닌 테이블 _해야한다고 생각
Ajeet 칸

3

때때로 마이그레이션 파일을 삭제 한 다음 데이터베이스에서 schema_migrations 테이블의 해당 항목을 삭제하는 경우가있었습니다. 예쁘지는 않지만 작동합니다.


3

이것은 Rails 5에서도 작동합니다.

마이그레이션이 가장 최근 인 경우 다음을 수행하여 마이그레이션이 추가 한 데이터베이스 열을 제거 할 수 있습니다.

rake db:rollback

그런 다음 다음을 실행하여 마이그레이션 파일 자체를 제거하십시오.

rails d migration WhateverYourMigrationWasNamed.rb 


1

삭제하려는 마이그레이션이 누락 되었기 때문에이 답변 중 어느 것도 내가 가진 문제에 맞지 않습니다. 다른 분기에서 마이그레이션을 만들고 실행 한 다음 폐기되었습니다. 문제는 마이그레이션이 실행될 때 rails가 schema_migrations데이터베이스 의 테이블에 버전을 추가한다는 것 입니다. 따라서 db 구조 또는 스키마에 나열되어 있지 않더라도 rails는 그것을 찾습니다. 다음을 실행하여 이러한 분리 된 마이그레이션을 표시 할 수 있습니다.

rails db:migrate:status

누락 된 마이그레이션의 버전을 확인하고 db 콘솔로 이동하십시오.

rails dbconsole

이제 마이그레이션 테이블에서 수동으로 버전을 제거하십시오.

delete from schema_migrations where version='<version>';

이제 잘해야합니다.


0

나는 똑같은 문제가 있었다.

  1. rails d migration fuu- 마지막 타임 스탬프로 마이그레이션을 삭제했습니다.
  2. rails d migration fuu- 이것은 다른 마이그레이션을 삭제했습니다.
  3. git status를 사용하여 더 이상 추적되지 않은 파일에 없는지 확인하십시오.
  4. rails g 마이그레이션 fuu

그것은 나를 위해 그것을 고쳤다.


0

참고 : 레일 5.0.0에서 시작 rake이 변경되었으므로 rails 다음을 수행하십시오.

rails db : migrate VERSION = 0

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.