- Konu sahibi
- #1
En son uygulanan migrasyonu geri almak için uygulamanın kök dizininde
Rails, migrasyonların uygulanma durumunu veritabanında izler. Geri alma komutu migrasyon dosyasını silmez; ilgili değişiklikleri migrasyonun ters işlemleriyle geri çevirmeye ve uygulanma kaydını kaldırmaya çalışır. Hangi komutun uygun olduğu, geri alınacak migrasyonun konumuna bağlıdır.
Önce uygulama dizinine geçin ve migrasyon durumunu inceleyin:
Çıktı, her migrasyonun uygulanmış mı yoksa bekliyor mu olduğunu gösterir. Geri almak istediğiniz migrasyonun bu veritabanında uygulanmış olduğunu ve hedef ortamın doğru seçildiğini kontrol edin. Ardından, örneğin yalnızca son migrasyonu geri almak için şu komutu çalıştırın:
Birden fazla adımı geri alacaksanız
Üretim ortamında çalıştırmanız gerekiyorsa ortamı komutta açıkça belirtin; örneğin
Rails, migrasyonun tersine çevrilemediğini bildirirse migrasyondaki bazı işlemler otomatik olarak geri alınamıyor olabilir. Örneğin veri dönüştüren bir işlem, eski hâlin nasıl kurulacağını açıkça belirtmeyi gerektirebilir. Hata mesajını ve migrasyon dosyasını inceleyin; gerekiyorsa migrasyonda
Komut hata vermeden çalıştığı hâlde beklediğiniz sonuç oluşmadıysa önce doğru ortamı ve veritabanını, sonra
bin/rails db:rollback çalıştırın. Birden fazla migrasyonu geri almak için STEP sayısını belirtin; belirli bir migrasyonu hedeflemek için dosya adındaki zaman damgasını VERSION olarak kullanın. İşlem veritabanı yapısını veya veriyi değiştirebilir; özellikle üretim ortamında önce yedek alın ve komutu doğru ortamda çalıştırdığınızdan emin olun.Geri alma yöntemini seçin
Rails, migrasyonların uygulanma durumunu veritabanında izler. Geri alma komutu migrasyon dosyasını silmez; ilgili değişiklikleri migrasyonun ters işlemleriyle geri çevirmeye ve uygulanma kaydını kaldırmaya çalışır. Hangi komutun uygun olduğu, geri alınacak migrasyonun konumuna bağlıdır.
| Amaç | Komut | Ne yapar? |
|---|---|---|
| Son migrasyonu geri almak | bin/rails db:rollback | En son uygulanmış migrasyonu geri çevirir. |
| Son birkaç migrasyonu geri almak | bin/rails db:rollback STEP=3 | Son üç uygulanmış migrasyonu sırayla geri çevirir. |
| Belirli bir migrasyonu geri almak | bin/rails db:migrate:down VERSION=20241026123456 | Belirtilen zaman damgalı migrasyonu geri almaya çalışır. |
VERSION yerine örnekteki sayıyı değil, kendi migrasyon dosyanızın başındaki zaman damgasını yazın. Örneğin dosya db/migrate/20241026123456_add_status_to_orders.rb ise sürüm değeri 20241026123456 olur. Belirli bir migrasyonu geri almak, daha sonra uygulanmış başka migrasyonlarla bağımlılık çakışmasına yol açabilir; böyle bir durumda önce son migrasyonları uygun sırayla geri almanız gerekebilir.Komutu çalıştırın ve sonucu doğrulayın
Önce uygulama dizinine geçin ve migrasyon durumunu inceleyin:
Bash:
bin/rails db:migrate:status
Çıktı, her migrasyonun uygulanmış mı yoksa bekliyor mu olduğunu gösterir. Geri almak istediğiniz migrasyonun bu veritabanında uygulanmış olduğunu ve hedef ortamın doğru seçildiğini kontrol edin. Ardından, örneğin yalnızca son migrasyonu geri almak için şu komutu çalıştırın:
Bash:
bin/rails db:rollback
Birden fazla adımı geri alacaksanız
STEP=3 gibi bir değer ekleyin. Komut başarılı biterse Rails yapılan geri alma işlemini bildirir; ardından bin/rails db:migrate:status ile ilgili migrasyonun durumunun değiştiğini kontrol edin. Veritabanı yapısının beklendiği gibi olduğunu ve uygulamanın bu yapıyla çalışabildiğini de doğrulayın. Durum çıktısındaki değişiklik, işlemin migrasyon kaydına yansıdığını gösterir; uygulama verisinin veya işlevlerinin bütünüyle doğru olduğunu tek başına kanıtlamaz.Üretim ortamında çalıştırmanız gerekiyorsa ortamı komutta açıkça belirtin; örneğin
RAILS_ENV=production bin/rails db:rollback. Önce doğru veritabanına bağlandığınızı doğrulayın ve yedeğinizin kullanılabilir olduğundan emin olun. Geri alma sırasında kaybolan verinin yedek olmadan kurtarılabileceğini varsaymayın.Geri alma başarısız olursa
Rails, migrasyonun tersine çevrilemediğini bildirirse migrasyondaki bazı işlemler otomatik olarak geri alınamıyor olabilir. Örneğin veri dönüştüren bir işlem, eski hâlin nasıl kurulacağını açıkça belirtmeyi gerektirebilir. Hata mesajını ve migrasyon dosyasını inceleyin; gerekiyorsa migrasyonda
up ve down yöntemlerini ya da reversible bloğunu tanımlayarak geri alma davranışını belirtin. Önce test veya geliştirme veritabanında doğrulamadan üretimde denemeyin.Komut hata vermeden çalıştığı hâlde beklediğiniz sonuç oluşmadıysa önce doğru ortamı ve veritabanını, sonra
db:migrate:status çıktısını kontrol edin. Migrasyon dosyasını silmek ya da elle değiştirmek, veritabanındaki migrasyon geçmişini kendiliğinden düzeltmez. Uygulanmış migrasyon dosyasını değiştirmek yerine, şema veya veri için gereken düzeltmeyi yeni bir migrasyonla yapmak genellikle daha güvenli bir yoldur.