Gerçek şu ki istediğimiz şudur: http://www.liquibase.org/
Liquibase, veritabanı değişikliklerini izlemek, yönetmek ve uygulamak için açık kaynaklı (Apache 2.0 Lisanslı), veritabanından bağımsız bir kütüphanedir. Basit bir öncül üzerine inşa edilmiştir: Tüm veritabanı değişiklikleri insan tarafından okunabilir ancak izlenebilir bir biçimde saklanır ve kaynak kontrolüne tabi tutulur.
Ancak geliştirme sürecimiz bunu desteklemiyor. Veritabanını genellikle kendimiz yazdığımız ayrı komut dosyaları aracılığıyla değiştirmiyoruz, etkinleştirdiğimiz eklentileri kullanıyoruz. Daha sonra kaynak kodu denetiminde kontrol ettiğimiz arama verilerini değiştirmek için DML komut dosyaları yazmıyoruz, yönetici sayfasında bir kullanıcı arayüzü kullanıyoruz ve bu nedenle geçiş sırasında bu değişikliği çoğaltmak için kaynak kodumuz yok.
Ancak, bazılarını taklit edebiliriz - bu sayfada listelenen araçlardan bazılarını kullanarak:
/programming//q/225772/149060
Örneğin, sıvı bazı isteğe bağlı olarak verilerde değişiklikler içeren bir fark özelliğine sahiptir. Potansiyel olarak, şema ve verileri bir komut dosyasına dağıtabiliriz, test verilerini (örneğin post, vb.) İçerme olasılığı olan belirli tabloları (mümkün olduğunca) hariç tutabiliriz ve daha sonra komut dosyasını üretim veritabanına uygulayabiliriz.
MySQLDiff (StackOverflow sorusu üzerinde tartışılmıştır) şema farkları yapar ve yazarı , tablo açısından veri farkları için mysql_coldiff önerir - her ikisi de perl'de uygulanır, eğer java araçları (liquidbase) sunucularınız için çok fazla kaynaksa da - her iki veritabanını da yerel ve aracı PC'nizde çalıştırmak bu sorunu çözer ...
Bunu gerçekten doğru yapmak istiyorsak, ayarlar, seçenekler veya diğer yapılandırma değişiklikleri ve şema değişiklikleri ile ilgili herhangi bir sql'i günlüğe kaydetmeliyiz ve kaydedilen kodu üretim sunucumuza karşı oynamak için bir geçiş komut dosyasına dönüştürmeliyiz. Taşıma komut dosyasını sunucuya karşı oynatın, wordpress site dosyalarını kopyalayın (varsa yüklemeler hariç) ve biz altınız.
Bana öyle geliyor ki, en iyi çıkış yolu, bir veritabanının birleştirilmesi için bir yol oluşturmak yerine, ihtiyacımız olan sql'ı yakalayan, saklayan ve daha sonra günlük kodundan bir geçiş komut dosyası oluşturan bir geliştiricinin migration-builder-eklentisidir. evreleme ve üretim arasında. Çözülmesi daha basit bir sorun gibi görünüyor.
@Bueltge'in enstrüman kancasının koduna ilham almak için eklenti çağırırsak: https://gist.github.com/1000143 (beni SAVEQUERIES ve kapatma kancası yönünde işaret ettiği için G + aracılığıyla Ron Rennick sayesinde, bulmam için beni yönlendir)
- bunun yerine SAVEQUERIES çıktısını almak için değiştirin
- yalnızca yöneticidayken çalıştır
- tüm seçimleri filtrele
- sonuçları kapatma kancasındaki tabloya kaydedin
- şu anda ne yaptığımıza bağlı olarak çıktı yakalamayı seçmeli olarak değiştirebiliriz.
Örneğin:
Yakalama Adı: XYZ Eklentisini Etkinleştirin ve Yapılandırın
Yakalama Durumu Geçişi - açık
... XYZ eklentisini kur ve yapılandır
Yakalama Durumu Geçişi - kapalı
Taşıma Komut Dosyasını Dışa Aktarma: Eklenti XYZ'yi Etkinleştirme ve Yapılandırma
Filtrelenmiş sıkışmış SQL ile bir açılır metin alanı oluşturmak için Dışa Aktar Düğmesine basın - ideal olarak mysql komut satırı çağrısı ile kabuk komut dosyası olarak önceden biçimlendirilmiş. Kopyalayın ve taşıma kodu klasörünüze yapıştırın ve kaynak kodu deponuza ekleyin.
Çalışırken yakalamayı açıp kapatmaya dikkat edin ve üretim veritabanınızı hazırlama veritabanınıza eşdeğer bir yapılandırmaya götürmek için mükemmel geçiş komut dosyasını oluşturabilirsiniz.
Daha da iyisi, TEST yapabileceğiniz bir komut dosyanız (veya aynı diziniz) olacaktır. Kopyalanabilir, test edilebilir, geçiş komut dosyalarına sahip görüntüleme !!
Ben zaten aşığım.
Başkası var mı?