복붙노트

[RUBY-ON-RAILS] 어떻게 특정 마이그레이션을 롤백?

RUBY-ON-RAILS

어떻게 특정 마이그레이션을 롤백?

나는 다음과 같은 마이그레이션 파일 DB \ 마이그레이션 \ 20100905201547_create_blocks.rb이

어떻게 구체적으로 그 이전 파일을 롤백 할 수 있습니까?

해결법

  1. ==============================

    1.

    rake db:rollback STEP=1
    

    당신이 롤백하려는 마이그레이션이 적용되는 마지막 인 경우,이 작업을 수행 할 수있는 방법입니다. 당신은 당신이 다시 가고 싶어하지만 많은 마이그레이션 1을 대체 할 수 있습니다.

    예를 들면 :

    rake db:rollback STEP=5
    

    또한 이상 (4, 3, 2, 또한 1) 일어난 모든 마이그레이션을 롤백 할 것이다.

    대상 마이그레이션을 다시 모든 마이그레이션을 롤백 (포함)하려면, 사용 : (이 수정 명령은 모든 의견이 원래의 게시물에서 오류를 지적 후에 추가 된)

    rake db:migrate VERSION=20100905201547
    

    위해 ONLY ONE 특정 마이그레이션 (ORDER OF OUT) 사용을 롤백합니다 :

    rake db:migrate:down VERSION=20100905201547
    

    나열 만 한 - 참고이 어떤 중보 마이그레이션을 롤백하지 것이다. 마이그레이션을 그리고 이전에 롤백되지 않은 어떤 다른 사람을 건너 뛰고, 해당 하나를 다시 실행합니다 : 그건 당신이 의도하지 않은 경우, 당신은 안전하게 레이크 DB를 실행할 수 있습니다.

    마이그레이션 : 혹시 순서가 하나의 마이그레이션을 마이그레이션 할 경우에, 또한 역 dB가 최대 :

    rake db:migrate:up VERSION=20100905201547
    
  2. ==============================

    2.

    rake db:migrate:down VERSION=20100905201547
    

    특정 파일을 롤백합니다.

    모든 마이그레이션의 버전을 확인하려면,이 명령을 사용할 수 있습니다 :

    rake db:migrate:status
    

    또는, 이전의 파일 이름 단순히 접두사는 롤백해야하는 버전입니다.

    마이그레이션에 루비 온 레일스 가이드 항목을 참조하십시오.

  3. ==============================

    3.당신이 할 수있는 마지막 마이그레이션을 롤백하려면

    당신이 할 수있는 마지막 마이그레이션을 롤백하려면

    rake db:rollback
    

    당신은 당신이해야 버전과 특정 마이그레이션을 롤백하려면 :

    rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
    

    의 경우 예를 들어, 버전이 20141201122027 경우, 당신은 할 것입니다 :

    rake db:migrate:down VERSION=20141201122027
    

    특정 마이그레이션을 롤백합니다.

  4. ==============================

    4.다른 옵션으로 롤백 : 당신은 레이크 DB를 사용하여 마이그레이션을 롤백 할 수 있습니다. 구문은 사용자의 요구 사항에 따라 달라집니다.

    다른 옵션으로 롤백 : 당신은 레이크 DB를 사용하여 마이그레이션을 롤백 할 수 있습니다. 구문은 사용자의 요구 사항에 따라 달라집니다.

    방금 마지막 마이그레이션을 롤백하려면 다음 중 하나를 사용할 수 있습니다

    rake db:rollback
    

    또는

    rake db:rollback STEP=1
    

    당신이 한 번에 마이그레이션 롤백 수를 원한다면, 당신은 단순히 인수를 전달할 :

    rake db:rollback STEP=n
    

    여기서 n은 롤백에 대한 마이그레이션의 수, 최근 마이그레이션에서 계산이다.

    특정 마이그레이션 롤백하려면, 당신은 다음의 이전의 버전을 통과해야한다 :

    rake db:migrate:down VERSION=xxxxx
    

    여기서 xxxxx는 마이그레이션의 버전 번호입니다.

  5. ==============================

    5.레이크 dB : 마이그레이션 : 다운 VERSION = your_migrations's_version_number_here

    레이크 dB : 마이그레이션 : 다운 VERSION = your_migrations's_version_number_here

    버전은 이전의 파일 이름에 숫자 접두어

    버전을 찾는 방법 :

    마이그레이션 파일은 rails_root / DB / 마이그레이션 디렉토리에 저장됩니다. 당신이 롤백 원하는 접두사 번호를 복사까지되는 해당 파일을 찾습니다.

    예를 들면

    파일 이름 : 20140208031131_create_roles.rb 다음 버전은 20140208031131입니다

  6. ==============================

    6.마지막으로 마이그레이션을 롤백 :

    마지막으로 마이그레이션을 롤백 :

    # rails < 5.0
    rake db:rollback
    
    # rails >= 5.0
    rake db:rollback
    # or
    rails db:rollback
    

    마이그레이션의 마지막 n 번호를 롤백

    # rails < 5.0
    rake db:rollback STEP=2
    
    # rails >= 5.0
    rake db:rollback STEP=2
    # or
    rails db:rollback STEP=2
    

    특정 마이그레이션을 롤백

    # rails < 5.0
    rake db:migrate:down VERSION=20100905201547
    
    # rails >= 5.0
    rake db:migrate:down VERSION=20100905201547
    # or
    rails db:migrate:down VERSION=20100905201547
    
  7. ==============================

    7.당신이 할 수있는 마지막 마이그레이션을 롤백하려면

    당신이 할 수있는 마지막 마이그레이션을 롤백하려면

    rake db:rollback
    

    당신은 당신이해야 버전과 특정 마이그레이션을 롤백하려면 :

    rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
    

    롤백에 원하는 마이그레이션 파일이 호출 된 경우 dB / 마이그레이션 / 20141201122027_create_some_table.rb, 그 이전의 버전은 그 이전이 생성 될 때의 타임 스탬프 및 마이그레이션이 될 것이라고 롤 위로 명령은 20141201122027입니다 :

    rake db:migrate:down VERSION=20141201122027
    
  8. ==============================

    8.이 가역 마이그레이션 및 실행 된 마지막 경우, 갈퀴 DB를 실행 롤백. 그리고 당신은 항상 버전을 사용할 수 있습니다. 예컨대

    이 가역 마이그레이션 및 실행 된 마지막 경우, 갈퀴 DB를 실행 롤백. 그리고 당신은 항상 버전을 사용할 수 있습니다. 예컨대

    롤백 명령을 할 수 있도록 마이그레이션 파일은 20140716084539_create_customer_stats.rb입니다 레이크 dB : 마이그레이션 : VERSION 아래로 = 20140716084539

  9. ==============================

    9.특정 버전 (예 : 20181002222222), 사용까지 모든 마이그레이션을 롤백하려면 :

    특정 버전 (예 : 20181002222222), 사용까지 모든 마이그레이션을 롤백하려면 :

    rake db:migrate VERSION=20181002222222
    

    (주이 사용하는 DB에 있음 : 마이그레이션을 -하지 DB를 : 마이그레이션 : 아래이 질문에 대한 다른 답변에서와 같이.)

    지정된 마이그레이션 버전이 현재 버전보다 오래된 가정이 최대 모든 마이그레이션을 롤백하지만, 지정된 버전을 포함하지 않음.

    예를 들어, 레이크 DB 경우 : 마이그레이션 : 상태 초기 표시 :

      (... some older migrations ...)
      up      20181001002039  Some migration description
      up      20181002222222  Some migration description
      up      20181003171932  Some migration description
      up      20181004211151  Some migration description
      up      20181005151403  Some migration description
    

    달리는:

    rake db:migrate VERSION=20181002222222
    

    발생합니다 :

      (... some older migrations ...)
      up      20181001002039  Some migration description
      up      20181002222222  Some migration description
      down    20181003171932  Some migration description
      down    20181004211151  Some migration description
      down    20181005151403  Some migration description
    

    참조 : https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations

  10. ==============================

    10.레일 가이드에서

    레일 가이드에서

    당신은 되돌릴 방법을 사용하여 롤백 마이그레이션에 액티브 레코드의 기능을 사용할 수 있습니다 :

    require_relative '20100905201547_create_blocks'
    
    class FixupCreateBlock < ActiveRecord::Migration
      def change
        revert CreateBlock
    
        create_table(:apples) do |t|
          t.string :variety
        end
      end
    end
    

    되돌리기 방법은 리버스 명령들의 블록을 받아 들인다. 이것은 이전 마이그레이션의 선택된 부분을 되돌릴 유용 할 수 있습니다. 예를 들어, CreateBlock가 노력하고 나중에는 우편 번호를 확인, 점검 제한 조건 대신에, 액티브 레코드 유효성 검사를 사용하는 것이 최선이 될 것입니다 결정되어 있다고 가정 해 봅시다.

        class DontUseConstraintForZipcodeValidationMigration < ActiveRecord::Migration
          def change
            revert do
              # copy-pasted code from CreateBlock
              reversible do |dir|
                dir.up do
                  # add a CHECK constraint
                  execute <<-SQL
                    ALTER TABLE distributors
                      ADD CONSTRAINT zipchk
                        CHECK (char_length(zipcode) = 5);
                  SQL
                end
                dir.down do
                  execute <<-SQL
                    ALTER TABLE distributors
                      DROP CONSTRAINT zipchk
                  SQL
                end
              end
    
              # The rest of the migration was ok
            end
          end
        end
    

    같은 마이그레이션은 되돌리기를 사용하지 않고 쓸 수 있었다 그러나 이것은 몇 단계를 포함 것 : CREATE_TABLE과 가역적의 순서를 반대로, DROP_TABLE에 의해 CREATE_TABLE 교체, 그리고 마지막으로 아래에 의해 대체 그 반대의 경우도 마찬가지입니다. 이것은 모든 되돌리기에 의해 처리된다.

  11. ==============================

    11.마이그레이션 명령을 사용하여 데이터베이스의 상태를 변경

    마이그레이션 명령을 사용하여 데이터베이스의 상태를 변경

    $ bundle exec rake db:migrate
    

    우리가 사용하는 단일 마이그레이션 단계를 취소 할 수 있습니다

      $ bundle exec rake db:rollback
    

    처음으로 모든 방법을 다시 이동하기 위해 사용할 수 있습니다

      $ bundle exec rake db:migrate VERSION=0
    

    당신이 추측 할 수 있듯이, 버전 번호가 순차적으로 마이그레이션을 목록에서 오는 그 버전 번호 0을 마이그레이션에 대한 다른 번호로 대체

  12. ==============================

    12.잘 레일 5 그것은 아주 쉽게 레이크 dB : 마이그레이션 : 상태 또는 마이그레이션 : DB 레일 상태를

    잘 레일 5 그것은 아주 쉽게 레이크 dB : 마이그레이션 : 상태 또는 마이그레이션 : DB 레일 상태를

    그것은 같은 방법으로 모두 처리하도록 수정되었습니다 그런 다음 당신이 롤 뒷면에 원하는 버전 선택 다음 실행 레이크 dB : 마이그레이션 VERSION = 2013424230423

    확인 버전은 모두 대문자입니다

    당신이 중간에 어떤 마이그레이션의 단계 또는 붙어에 문제가있는 경우 단순히 이미 마이그레이션 된 라인 밖으로 마이그레이션 파일과 코멘트로 이동합니다.

    희망이 도움이

  13. ==============================

    13.당신이 롤백하려는 및 마이그레이션하는 경우 당신은 실행할 수 있습니다 :

    당신이 롤백하려는 및 마이그레이션하는 경우 당신은 실행할 수 있습니다 :

    rake db:migrate:redo
    

    그와 동일합니다 :

    rake db:rollback
    rake db:migrate
    
  14. from https://stackoverflow.com/questions/3647685/how-to-rollback-a-specific-migration by cc-by-sa and MIT license