Ruby on Rails: rake db: migrate ile bir geçişi nasıl geri alabilirim?


94

MODEL User'ı kurduktan sonra bunu aldım.

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

Şimdi rake yaparsam db: migrate kullanıcılar tablosu oluşturulacaktır.

Bu geçişi nasıl geri alabilirim, yani rake kullanarak kullanıcılar tablosunu tekrar nasıl silebilirim?

Yanıtlar:


147

Aşağıdaki komutu çalıştırın

rake db:migrate:down VERSION=<version>

<version>geri döndürmek istediğiniz taşıma dosyanızın sürüm numarası nerede .

Örneğin. 3846656238_create_users.rb dosya adıyla bir taşımayı geri döndürmek istiyorsanız

komisyon db: geçiş: aşağı VERSION = 3846656238


Bir alıyorum UnknownMigrationVersionErrorama bunun geçişlerimin içeride olmasından kaynaklandığını anladım db/migrate/main, db:migrate:downbu belirli dizine veya geçiş alt dizinlerine bakmak için bunun için bir çözüm bilen var mı?
tf.rz

Bu sadece 3 ve üstü raylar içindir. Hayatım raylarda 2. Çok üzücü
morhook

@morhook Bu, raylar 3 için de çalışır. Belgelere buradan göz atın guides.rubyonrails.org/v3.2/migrations.html
Mahesh

Haklısın! Hem raylar 2 hem de raylar 3 için çalışır. Girişiniz için @ Mahesh'e teşekkürler!
morhook


65

Taşıma işlemlerini geri almak için kullanılabilen üç seçenek olduğuna inanıyorum (bunlar da örtüşüyor):

  1. Aşağı yuvarlayın En son göç:

    rake db:migrate:down # Yalnızca Raylar 2.

  2. Son geçişlerin bir sayısını (n) azaltın :

    rake db:rollback STEP=n

  3. Aşağı yuvarlayın için bir önceki, belirli bir sürümü:

    $ rake db:migrate:down VERSION=nnn # Rails 3 (sürüm numarasını da belirtin).

Sürüm Numarası, 886af3194768917c78e gibi görünen uzun onaltılık bir sayı olan kesinleştirme için SHA (Güvenli Karma Algoritması) anlamına gelir ... Yaparak görebilirsiniz git log

Bu komutları (ve diğerlerini) açıklamaları ile birlikte rake -T db:hangi rails 3.2'nin içerdiğini kullanarak görebilirsiniz :

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
Aşağı yuvarlayın için belirli bir sürümünde:rake db:migrate VERSION=<version number>
Ajedi32

3
En azından 3.0.20 rayları için, ilk komut yanlıştır. rake db:migrate:down"VERSION gerekli" hata mesajıyla tek bir iptal edilir. Tavsiye rake db:rollback ancak çalışır.
martin

Cevapta detaylandırıldığı gibi, Rails 2 SADECE ilk komut için.
Michael Durrant

1
Ortam değişkenleri büyük / küçük harfe duyarlıdır, bu yüzden olmalı STEPveVERSION
Kostas Rousis

Netleştirmek için $ rake db:migrate:down VERSION=nnnaşağı doğru döndürün vermez için bir sürümü, aşağısı geçirir belirtilen sürümünü.
johnml

15

Geri alma işlemini gerçekleştirebilir ve en son kaç taşıma işleminin geri alınacağını belirtebilirsiniz, örneğin

rake db:rollback STEP=3

son 3 geçiş için.


Bu, son birkaç taşımayı geri almak istiyorsanız sürüm numaralarına bakmak yerine daha hızlı ve daha kolay bir yoldur
Ön alfa

11

Yeni bir programcı olarak (veya diğer yeni programcılara)

rake db:rollbackyaklaşık yarısı kadar çalışır. Oradan başlıyorum.

Değilse, rake db:migrate:down VERSION=3846656238

Geri döndürmek istediğiniz geçiş dosyanızın sürüm numarası için VERSION'ı takın.


10
rake db:migrate:redo

Son geçişi geri alacak ve yeniden uygulayacaktır.


5

Raylar için 5 kullanabiliriz rails command instead of rake

rails db:migrate:down VERSION=<version>

misal

rails db: migrate: aşağı VERSION = 20170330090327


2

Bu komutu terminalinizde çalıştırın:

rake db:migrate:status

veya

bundle exec rake db:migrate:status

Daha önce çalıştırdığımız tüm taşıma işlemlerinin durumunu, göç kimliklerini ve geçiş adını gösterir. taşıma kimliğinizi seçin (yani sürüm numaranız) ve bu kimliği aşağıdaki komuta version = ,,, ve enter tuşuna basın

bundle exec rake db:migrate:down VERSION=

0

Bir geçiş nasıl geri alınır

(1) Önce Göç Kimliğini Tanımlayın

rake db:migrate:status

  • Kimlik numarasını kopyalayın.

Geri alınacak geçişi belirleyin.

(2) Ardından geçişi geri alın

rake db:migrate:down VERSION=20190802023239

  • İlgili kimlik numarasını yukarıya yapıştırın. Elbette, sizin durumunuzda göç kimliği farklı olacaktır! Doğru taşıma kimliğini kullanın.

....... ve şimdi yarışlara gidiyorsunuz!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.