Geliştirme, test ve üretim sunucuları arasındaki veritabanı şemalarını ve verileri yönetme konusunda iyi örnekler bulmaya çalışırken zorlandım.
İşte kurulumumuz. Her geliştiricinin, uygulamamızı ve MySQL veritabanını çalıştıran bir sanal makinesi vardır. İstedikleri her şeyi yapmak onların kişisel sanal alanıdır. Şu anda, geliştiriciler SQL şemasında bir değişiklik yapacak ve veritabanını SVN'de taahhüt ettikleri bir metin dosyasına dökeceklerdir.
Her zaman en son taahhüt edilen kodu çalıştıracak sürekli bir entegrasyon geliştirme sunucusu kurmak istiyoruz. Bunu şimdi yaparsak, her derleme için veritabanını SVN'den yeniden yükler.
"Sürüm adayları" nı çalıştıran bir test (sanal) sunucumuz var. Test sunucusuna dağıtım şu anda çok manuel bir işlemdir ve genellikle en son SQL'i SVN'den yüklememi ve ayarlamamı içerir. Ayrıca, test sunucusundaki veriler tutarsız. Son geliştiricinin sanal alan sunucusunda sahip olduğu test verileri ile sonuçlanırsınız.
Her şeyin bozulduğu yer, üretime dağıtımdır. Canlı verilerin test verileri ile üzerine yazamadığımız için, tüm şema değişikliklerinin manuel olarak yeniden oluşturulması gerekir. Verileri işlemek için çok sayıda şema değişikliği veya dönüşüm komut dosyası varsa, bu gerçekten kıllı olabilir.
Sorun yalnızca şema olsaydı, daha kolay bir sorun olurdu, ancak veritabanında güvenlik ve izin tablolarındaki meta veriler gibi geliştirme sırasında da güncellenen "temel" veriler var.
Bu, sürekli entegrasyona ve tek adımlı yapılara doğru ilerlerken gördüğüm en büyük engel. Nasıl mı sen bunu çözmek?
Takip eden bir soru: Belirli bir veritabanı örneğini yükseltmek için hangi komut dosyalarının çalıştırılacağını öğrenmek için veritabanı sürümlerini nasıl izlersiniz? Lance gibi bir versiyon tablosu standart prosedürün altında mı bahsediyor?
Tarantino'ya referansınız için teşekkürler. Bir .NET ortamında değilim, ancak kendi DataBaseChangeMangement wiki sayfasını çok yararlı buldum . Özellikle bu Powerpoint Sunumu (.ppt)
Ben *.sql
veritabanında bir tablo karşı belirli bir dizinde komut dosyalarının adlarını denetler ve dosya adının ilk bölümünü oluşturan bir tamsayı dayalı sırada olmayanları çalıştıran bir Python komut dosyası yazacağım . Oldukça basit bir çözümse, olacağından şüpheleniyorum, o zaman buraya göndereceğim.
Bunun için çalışan bir senaryom var. Varsa DB'nin başlatılmasını ve gerektiğinde yükseltme komut dosyalarının çalıştırılmasını sağlar. Varolan bir veritabanını silmek ve bir dosyadan test verilerini almak için de anahtarlar vardır. Yaklaşık 200 satır var, bu yüzden yayınlamayacağım (ilgi varsa macununa koyabilirim).