Aşağıdaki taşıma dosyasına sahibim db\migrate\20100905201547_create_blocks.rb
Bu taşıma dosyasını özel olarak nasıl geri alabilirim?
Aşağıdaki taşıma dosyasına sahibim db\migrate\20100905201547_create_blocks.rb
Bu taşıma dosyasını özel olarak nasıl geri alabilirim?
Yanıtlar:
rake db:rollback STEP=1
Geri almak istediğiniz geçiş en son uygulanan ise, bunu yapmanın bir yoludur. Geri dönmek istediğiniz pek çok taşıma işleminin yerine 1 kullanabilirsiniz.
Örneğin:
rake db:rollback STEP=5
Daha sonra gerçekleşen tüm göçleri de geri alacak (4, 3, 2 ve ayrıca 1).
Tüm taşıma işlemlerini bir hedef taşıma işlemine geri döndürmek (ve dahil etmek) için şunu kullanın: (Bu düzeltilmiş komut, orijinal gönderideki hatayı gösteren tüm yorumlar SONRASI eklenmiştir)
rake db:migrate VERSION=20100905201547
YALNIZCA belirli bir taşıma işlemini (SİPARİŞ DIŞI) geri almak için şunu kullanın:
rake db:migrate:down VERSION=20100905201547
Bunun, araya giren geçişleri - yalnızca listelenenleri - geri almayacağını unutmayın. İstediğiniz bu değilse, güvenle çalıştırabilirsiniz rake db:migrate
ve daha önce geri alınmamış olanları atlayarak yalnızca onu yeniden çalıştıracaktır.
Tek bir göçü düzensiz olarak taşımak isterseniz, bunun tersi de vardır db:migrate:up
:
rake db:migrate:up VERSION=20100905201547
STEP=-1
. Bunu bir kez yaptım ve her şeyi geri alarak delirdi. İyi değil! Bu Rails 4.2 idi - Sanırım şimdiye kadar düzeltilmiş olabilir.
rake db:migrate:down VERSION=20100905201547
söz konusu dosyayı geri alır.
Tüm taşıma işlemlerinin sürümünü bulmak için şu komutu kullanabilirsiniz:
rake db:migrate:status
Veya, taşımanın dosya adının öneki, geri almanız gereken sürümdür.
Taşımalarla ilgili Ruby on Rails kılavuz girişine bakın .
Son taşımayı geri almak için şunları yapabilirsiniz:
rake db:rollback
Bir sürümle belirli bir taşımayı geri almak istiyorsanız yapmanız gerekenler:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
Örneğin, sürüm 20141201122027 ise, şunları yapacaksınız:
rake db:migrate:down VERSION=20141201122027
belirli bir geçişi geri almak için.
rake db:rollback
Farklı seçeneklerle taşıma işleminizi geri alabilirsiniz . Sözdizimi gereksinimlerinize göre farklı olacaktır.
Yalnızca son geçişi geri almak istiyorsanız,
rake db:rollback
veya
rake db:rollback STEP=1
Bir seferde taşıma işlemlerinin geri alma sayısını istiyorsanız, yalnızca bir bağımsız değişken iletirsiniz:
rake db:rollback STEP=n
Burada n
, en son taşıma işleminden itibaren geri alma işlemine geçirilen taşıma sayısıdır.
Belirli bir taşıma işlemine geri dönmek istiyorsanız, taşıma sürümünü aşağıda belirtmeniz gerekir:
rake db:migrate:down VERSION=xxxxx
burada xxxxx, taşıma işleminin sürüm numarasıdır.
rake db:migrate:down VERSION=your_migrations's_version_number_here
Sürüm, geçişin dosya adındaki sayısal önektir
Sürüm nasıl bulunur :
Taşıma dosyalarınız rails_root/db/migrate
dizininizde saklanır . Geri almak istediğiniz uygun dosyayı bulun ve önek numarasını kopyalayın.
Örneğin
dosya adı: 20140208031131_create_roles.rb
o zaman sürüm20140208031131
rake db:migrate:status
Son taşıma işlemini geri alma:
# rails < 5.0
rake db:rollback
# rails >= 5.0
rake db:rollback
# or
rails db:rollback
Son n
taşıma sayısını geri alma
# rails < 5.0
rake db:rollback STEP=2
# rails >= 5.0
rake db:rollback STEP=2
# or
rails db:rollback STEP=2
Belirli bir taşımayı geri alma
# 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
Son taşımayı geri almak için şunları yapabilirsiniz:
rake db:rollback
Bir sürümle belirli bir taşımayı geri almak istiyorsanız yapmanız gerekenler:
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
Geri almak istediğiniz geçiş dosyası çağrıldıysa db/migrate/20141201122027_create_some_table.rb
, söz konusu taşımanın SÜRÜMÜ, söz konusu taşımanın 20141201122027
ne zaman oluşturulduğunun zaman damgasıdır ve taşımayı geri alma komutu şu şekildedir:
rake db:migrate:down VERSION=20141201122027
Geri almak için belirli bir sürümüne Tüm taşıma işlemlerini kadar (örneğin 20181002222222
), kullanım:
rake db:migrate VERSION=20181002222222
(Not bu kullanımları db:migrate
- değil db:migrate:down
. Bu soruya diğer cevaplar olduğu gibi)
Belirtilen taşıma sürümünün geçerli sürümden daha eski olduğu varsayılırsa, bu, belirtilen sürüme kadar olan ancak olmayan tüm geçişleri geri alır.
Örneğin, rake db:migrate:status
başlangıçta aşağıdakileri görüntülerse:
(... 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
Koşu:
rake db:migrate VERSION=20181002222222
Sonuçlanacak:
(... 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
Referans: https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations
Gönderen Raylar Rehberi
Active Record'un taşımaları geri alma yeteneğini aşağıdaki revert
yöntemi kullanarak kullanabilirsiniz :
require_relative '20100905201547_create_blocks'
class FixupCreateBlock < ActiveRecord::Migration
def change
revert CreateBlock
create_table(:apples) do |t|
t.string :variety
end
end
end
revert
Yöntem ayrıca, tersine çevirmek için talimatlar bloğunu kabul eder. Bu, önceki taşıma işlemlerinin seçilen bölümlerini geri almak için yararlı olabilir. Örneğin, CreateBlock'un taahhüt edildiğini ve daha sonra posta kodunu doğrulamak için CHECK kısıtlaması yerine Aktif Kayıt doğrulamalarının kullanılmasının en iyi olacağına karar verelim.
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
Aynı geçiş, geri döndürme olmadan da yazılmış olabilir, ancak bu birkaç adım daha içerebilirdi: create_table ve reversible sırasını tersine çevirme, create_table'ı drop_table ile değiştirme ve son olarak down ile değiştirme ve tersi. Tüm bunlar geri döndürülerek halledilir.
Taşıma işlemleri şu komutu kullanarak veritabanının durumunu değiştirir:
$ bundle exec rake db:migrate
Kullanarak tek bir taşıma adımını geri alabiliriz
$ bundle exec rake db:rollback
Başlangıca geri dönmek için
$ bundle exec rake db:migrate VERSION=0
Tahmin edebileceğiniz gibi, başka herhangi bir sayının yerine 0 girilmesi, sürüm numaralarının geçişleri sırayla listelemesinden geldiği sürüm numarasına taşınır.
Raylarda 5 oldukça kolay tırmık db: migrate: status veya rails db: migrate: status
Her ikisini de aynı şekilde işlemek için değiştirildi Sonra geri almak istediğiniz Sürümü seçin ve daha sonra komisyon db'yi çalıştırın: migrate VERSION = 2013424230423
VERSION öğesinin büyük harf olduğundan emin olun
Taşıma işleminin herhangi bir adımıyla ilgili bir sorununuz varsa veya ortada sıkışıp kalmışsanız, taşıma dosyasına gidin ve önceden taşınan satırları yorumlayın.
umarım yardımcı olur
Class.down
stackoverflow.com/questions/753919/run-a-single-migration-file