- Konu sahibi
- #1
Migration çalışmıyorsa önce komutu doğru proje ve ortamda çalıştırın, ardından migration durumunu ve ilk somut hata mesajını inceleyin. Bağlantı, yetki veya şema uyuşmazlığını giderdikten sonra komutu yeniden çalıştırıp ilgili migration’ın
Durum çıktısında
Hata alırsanız yalnızca en sondaki genel başarısızlık mesajına değil, onun üzerindeki ilk anlamlı hata sınıfına ve açıklamaya bakın. Gerekirse ayrıntı için aynı komutu
Bağlantı sorununda
Kimlik doğrulama hatasında kullanıcı ve parola bilgisini güvenli kaynağından karşılaştırın. Bağlantı kuruluyor ancak şema değişikliği reddediliyorsa uygulama kullanıcısının ilgili veritabanında gereken işlem izinlerini yöneticiden isteyin. Örneğin MySQL’de bağlantı yetkisi ile belirli bir tabloyu değiştirme yetkisi farklı kontrollerdir; başarılı bağlantı her migration işleminin yetkili olduğunu göstermez.
Migration henüz ortak ortamlara uygulanmamışsa, tekrar eden veya yanlış sıradaki işlemi proje geçmişine uygun biçimde düzelterek dosyayı kaydedin ve yeniden çalıştırın. Başka ortamlarda uygulanmış bir migration’ı geriye dönük değiştirmek yerine genellikle yeni bir düzeltme migration’ı hazırlamak daha güvenlidir. Gerçek şema ile geçmiş uyuşmuyorsa, veri içeriğini ve işlemin önceki etkilerini anlamadan sütunu silmeyin veya migration sürüm kaydını elle değiştirmeyin. Bazı veritabanlarında başarısız migration’ın bir kısmı uygulanmış kalabilir.
Veritabanı hiç oluşturulmamışsa ve hedefin yeni bir geliştirme veritabanı olduğundan eminseniz
Sorun sürüyorsa proje sorumlusuna Rails ve Ruby sürümlerini, kullanılan veritabanı türünü, ortamı, çalıştırılan komutu, ilgili migration dosyasını ve ilk anlamlı hata mesajını iletin. Parolaları, bağlantı adreslerindeki gizli bilgileri ve hassas verileri çıkarın; yetki veya şema uyuşmazlığının incelenmesini isteyin. Eklediğiniz geçici tanılama çıktısını işlem bitince kaldırın.
up durumuna geçtiğini doğrulayın. Veritabanını sıfırlamak ilk çözüm değildir; özellikle üretimde veri kaybına yol açabilir.Komutu ve migration durumunu kontrol edin
Terminali projeninGemfile dosyasının bulunduğu dizinde açın. Migration, veritabanı şemasında yapılacak değişikliği tanımlayan Ruby dosyasıdır. Önce projenin bağımlılıklarının kurulu olduğundan ve kullanacağınız veritabanına erişiminiz bulunduğundan emin olun. Ardından geliştirme ortamında şu komutları çalıştırın:
Kod:
bin/rails db:migrate:status RAILS_ENV=development
bin/rails db:migrate RAILS_ENV=development
Durum çıktısında
down, ilgili migration’ın bu veritabanında henüz uygulanmadığını; up ise sürümünün uygulanmış olarak kaydedildiğini gösterir. Komut hatasız bitse de beklediğiniz değişiklik görünmüyorsa ortamı, bağlı veritabanını ve dosyanın db/migrate altında bulunduğunu kontrol edin. up durumu, şemanın daha sonra elle değiştirilmediğini kanıtlamaz.Hata alırsanız yalnızca en sondaki genel başarısızlık mesajına değil, onun üzerindeki ilk anlamlı hata sınıfına ve açıklamaya bakın. Gerekirse ayrıntı için aynı komutu
--trace seçeneğiyle tekrarlayın; çıktıda parola veya bağlantı adresi bulunabileceğinden paylaşmadan önce gizleyin.Hata türüne göre ilerleyin
Aşağıdaki ayrım, hatanın hangi katmanda oluştuğunu belirlemenize yardımcı olur:| Belirti | İlk kontrol |
|---|---|
| Bağlantı reddediliyor veya sunucu bulunamıyor | Sunucu, adres ve port |
| Kimlik doğrulama veya yetki hatası | Kullanıcı, parola ve gerekli veritabanı izinleri |
| Tablo veya sütun zaten var ya da bulunamıyor | Gerçek şema ve migration sırası |
| Ruby veya bağımlılık hatası | Hata verilen dosya, satır ve proje bağımlılıkları |
config/database.yml dosyasındaki seçili ortamı ve varsa DATABASE_URL ortam değişkenini inceleyin. Veritabanı servisinin çalıştığını, adresin ve portun uygulamanın çalıştığı yerden erişilebilir olduğunu doğrulayın. Uygulama bir konteynerde çalışıyorsa localhost konteynerin kendisini ifade eder; veritabanı ayrı bir servisteyse uygun servis adresini kullanın. Ayarı değiştirdikten sonra komutu aynı çalışma ortamında yeniden deneyin.Kimlik doğrulama hatasında kullanıcı ve parola bilgisini güvenli kaynağından karşılaştırın. Bağlantı kuruluyor ancak şema değişikliği reddediliyorsa uygulama kullanıcısının ilgili veritabanında gereken işlem izinlerini yöneticiden isteyin. Örneğin MySQL’de bağlantı yetkisi ile belirli bir tabloyu değiştirme yetkisi farklı kontrollerdir; başarılı bağlantı her migration işleminin yetkili olduğunu göstermez.
Şema ile migration geçmişini karşılaştırın
Örneğin bir migrationusers tablosuna email sütunu eklerken sütunun zaten var olduğunu bildiriyorsa, ilgili dosyayı açıp işlemi okuyun; sonra veritabanı istemcisiyle doğru veritabanındaki gerçek tabloyu inceleyin. Sütunun elle eklenmiş olması, başka bir migration tarafından oluşturulması veya önceki denemenin kısmen uygulanmış olması olası nedenlerdir. Durum çıktısındaki sürüm ile dosyanın zaman damgasını da karşılaştırın.Migration henüz ortak ortamlara uygulanmamışsa, tekrar eden veya yanlış sıradaki işlemi proje geçmişine uygun biçimde düzelterek dosyayı kaydedin ve yeniden çalıştırın. Başka ortamlarda uygulanmış bir migration’ı geriye dönük değiştirmek yerine genellikle yeni bir düzeltme migration’ı hazırlamak daha güvenlidir. Gerçek şema ile geçmiş uyuşmuyorsa, veri içeriğini ve işlemin önceki etkilerini anlamadan sütunu silmeyin veya migration sürüm kaydını elle değiştirmeyin. Bazı veritabanlarında başarısız migration’ın bir kısmı uygulanmış kalabilir.
Veritabanı hiç oluşturulmamışsa ve hedefin yeni bir geliştirme veritabanı olduğundan eminseniz
bin/rails db:create RAILS_ENV=development çalıştırın; ardından migration komutunu tekrarlayın. Mevcut veritabanını yeniden oluşturmak veya db:reset çalıştırmak farklı ve yıkıcı bir işlemdir.Düzeltmeyi doğrulayın
Migration komutunu aynı ortamda tekrar çalıştırın ve ardındanbin/rails db:migrate:status RAILS_ENV=development ile ilgili sürümün up olduğunu kontrol edin. Beklenen tablo veya sütunu ayrıca veritabanında inceleyin; durum kaydı tek başına mevcut şemanın doğruluğunu garanti etmez.Sorun sürüyorsa proje sorumlusuna Rails ve Ruby sürümlerini, kullanılan veritabanı türünü, ortamı, çalıştırılan komutu, ilgili migration dosyasını ve ilk anlamlı hata mesajını iletin. Parolaları, bağlantı adreslerindeki gizli bilgileri ve hassas verileri çıkarın; yetki veya şema uyuşmazlığının incelenmesini isteyin. Eklediğiniz geçici tanılama çıktısını işlem bitince kaldırın.
Moderatör tarafında düzenlendi: