Ruby on Rails : rake db : migrate로 마이그레이션을 되돌리려면 어떻게해야합니까?


94

devise MODEL User를 설치 한 후 이것을 얻었습니다.

class DeviseCreateUsers < ActiveRecord::Migration
  def self.up
    create_table(:users) do |t|
      t.database_authenticatable :null => false
      t.recoverable
      t.rememberable
      t.trackable

      # t.encryptable
      # t.confirmable
      # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
      # t.token_authenticatable


      t.timestamps
    end

    add_index :users, :email,                :unique => true
    add_index :users, :reset_password_token, :unique => true
    # add_index :users, :confirmation_token,   :unique => true
    # add_index :users, :unlock_token,         :unique => true
    # add_index :users, :authentication_token, :unique => true
  end

  def self.down
    drop_table :users
  end
end

이제 rake db : migrate를 수행하면 사용자 테이블이 생성됩니다.

이 마이그레이션을 되돌릴 수있는 방법, 즉 rake를 사용하여 사용자 테이블을 다시 삭제할 수있는 방법은 무엇입니까?

답변:


147

다음 명령을 실행하십시오.

rake db:migrate:down VERSION=<version>

<version>되돌리려는 마이그레이션 파일의 버전 번호는 어디에 있습니까 ?

예. 파일 이름이 3846656238_create_users.rb 인 마이그레이션을 되돌리려는 경우

rake db : migrate : down VERSION = 3846656238


나는 얻고 UnknownMigrationVersionError있지만 내 마이그레이션이 내부에 있기 때문에 db/migrate/main누구든지 db:migrate:down특정 디렉토리 또는 마이그레이션 하위 디렉토리 내부를 살펴볼 수있는 해결 방법을 알고 있습니까?
tf.rz 17:02에

이것은 레일 3 이후에만 해당됩니다. 내 인생은 레일 2에 있습니다. 너무 슬퍼
Morhook

@morhook 이것은 레일 3에서도 작동합니다. 여기에서 문서를 확인하십시오 guides.rubyonrails.org/v3.2/migrations.html
Mahesh

당신이 맞아요! 그것은 rails 2와 rails 3 모두에서 작동합니다. 귀하의 입력에 대해 @Mahesh에게 감사드립니다!
morhook


65

마이그레이션을 되 돌리는 데 사용할 수있는 세 가지 옵션이 있다고 생각합니다 (중복도 있음).

  1. 가장 최근 마이그레이션을 롤 다운합니다 .

    rake db:migrate:down # Rails 2에만 해당됩니다.

  2. 최근 마이그레이션 횟수 (n)를 롤 다운 합니다.

    rake db:rollback STEP=n

  3. 아래로 롤 이전, 특정 버전 :

    $ rake db:migrate:down VERSION=nnn # Rails 3 (버전 번호도 제공).

버전 번호는 커밋에 대한 SHA (Secure Hash Algorithm)를 의미하며 886af3194768917c78e와 같은 긴 16 진수입니다. 다음을 수행하여 확인할 수 있습니다. git log

rake -T db:rails 3.2에 포함되는 내용을 사용하여 이러한 명령 (및 기타)을 설명과 함께 볼 수 있습니다 .

rake db:migrate         # Migrate the database (options: VERSION=x, VERBOSE=false)
rake db:migrate:status  # Display status of migrations
rake db:rollback        # Rolls the schema back to the previous version (specify steps w/ STEP=n)

5
아래로 롤 특정 버전 :rake db:migrate VERSION=<version number>
Ajedi32

3
적어도 레일 3.0.20의 경우 첫 번째 명령이 잘못되었습니다. rake db:migrate:down"VERSION이 필요합니다"라는 오류 메시지와 함께 단일이 중단됩니다. 은 권장 rake db:rollback 하지만 작동합니다.
마틴

답변에서 자세히 설명했듯이 Rails 2는 첫 번째 명령에만 해당됩니다.
Michael Durrant

1
그것이 있어야 있도록 환경 변수는 대소 문자를 구분 STEP하고VERSION
코스타스 Rousis

, 명확히하기 위해 $ rake db:migrate:down VERSION=nnn굴러하지 않습니다 버전, 그것은 아래로 마이그레이션 지정된 버전을.
johnml

15

롤백을 수행하고 롤백 할 마지막 마이그레이션 수를 지정할 수 있습니다. 예 :

rake db:rollback STEP=3

마지막 마이그레이션 3 회


이 대신에 당신이 지난 몇 마이그레이션을 취소하려는 경우 버전 번호를 찾는으로, 더 빠르고 쉬운 방법입니다
전 알파

11

새로운 프로그래머 (또는 다른 새로운 프로그래머)

rake db:rollback절반 정도 작동합니다. 나는 거기서 시작한다.

그렇지 않다면 rake db:migrate:down VERSION=3846656238

되돌리려는 마이그레이션 파일의 버전 번호에 VERSION을 연결하십시오.


10
rake db:migrate:redo

마지막 마이그레이션을 실행 취소하고 다시 적용합니다.


5

레일 5의 경우 다음을 사용할 수 있습니다. rails command instead of rake

rails db:migrate:down VERSION=<version>

rails db : migrate : down VERSION = 20170330090327


2

터미널에서 다음 명령을 실행하십시오.

rake db:migrate:status

또는

bundle exec rake db:migrate:status

이전에 실행 한 모든 마이그레이션의 상태, 마이그레이션 ID, 마이그레이션 이름을 보여줍니다. 마이그레이션 ID (예 : 버전 번호)를 선택하고 다음 명령에서 version = 뒤에 해당 ID를 입력하고 Enter를 누릅니다.

bundle exec rake db:migrate:down VERSION=

0

마이그레이션을 롤백하는 방법

(1) 먼저 마이그레이션 ID 식별

rake db:migrate:status

  • ID 번호를 복사하십시오.

롤백 할 마이그레이션을 식별하십시오.

(2) 그런 다음 마이그레이션 롤백

rake db:migrate:down VERSION=20190802023239

  • 위의 관련 ID 번호를 붙여 넣으십시오. 물론 귀하의 경우 마이그레이션 ID가 다릅니다! 올바른 마이그레이션 ID를 사용하십시오.

....... 그리고 이제 당신은 경주를 시작합니다!

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