Dev ve prod arasında Wordpress veritabanı senkronizasyonu


19

İki Wordpress yüklemesi arasında veritabanının yanı sıra dosyaların nasıl senkronize edileceği hakkında daha önce soru soruldu.

Veritabanı düzeyinde, yanıt genellikle bir veritabanını döküp başka bir sunucuya eklemektir. Buradaki sorun, prod sunucusunda yapılmış olabilecek değişiklikleri kaybetmenizdir. Örneğin, kullanım metrikleri, yorumlar vb.

Bunu göz önünde bulundurarak, deltaları oluşturabilmeniz ve daha sonra bunları eşya sitesine enjekte edebilmeniz için Wordpress ORM'yi genişletmenin mümkün olup olmayacağını merak etmeye başladım.

Bunu deneyen, inceleyen veya herhangi bir fikri veya yorumu olan var mı?


1
Buna baktım, evet, ama çok başarılı olamadım. Başka bir CMS platformuyla kavram kanıtına işaret edebilseydiniz, WordPress için bunu reddedebileceğimize eminim.
EAMann

Kopyalamaya ne dersiniz?
kovshenin

MySQL ile çoğaltma bir PITA olan bir tür master-master çoğaltma gerektirir. Bunun dev ve prod arasında olduğu gerçeğini hesaba katarsanız, çoğaltmanın ertelenmesi gerekir, bu da büyük olasılıkla her zaman kırılır.
jonathanserafini

Yanıtlar:


11

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ı?


2
Güzel yazma. Bu soruna çok fazla zaman harcadım çünkü yardımımızı arayan müşterilerim var. Bu gerçekten zor bir sorun, ancak SQL seviyesine inmenin muhtemelen % 100 çalışmasını sağlama olasılığının düşük olduğu "okyanusu kaynatın" çözümünün çok fazla olduğuna karar verdik . Çözümün, WordPress'in yapısını anlayan ve başka bir şey için kanca sağlayan açık kodla "böl ve fethet" yaklaşımını kullanmak olduğunu düşünüyorum . Umarım gelecekte bir noktada halka açık bir çözüm sunabiliriz.
MikeSchinkel

Peki ... bunu kim yapmak ister?
Dave Kiss

bakan herkes için, aynı fikir bir eklenti olarak kullanılabilir görünüyor: wordpress.org/plugins/query-recorder
majick

3

Veritabanı Sync WordPress eklentisi iki sunucu arasında veri senkronizasyonu büyük bir iş yapar.

Varsayılan olarak TÜM hedef verilerinin üzerine yazar, ancak eklentiye sadece belirli veritabanı tablolarını senkronize etmenize izin veren bazı geliştirmeler yaptım. Bu, üzerine yazılmasını istemediğiniz yorumları, kullanıcıları ve diğer verileri tutmanıza yardımcı olabilir. Bu size ihtiyacınız olan ayrıntı düzeyini veriyor mu?

Değişikliklerimi henüz halka açıklamamıştım, ancak bir kopyayla ilgileniyorsanız, bana simon-at-yump.com.au adresinden bir e-posta gönderin. Birisi bunu yararlı bulursa veya ek özellik istekleri varsa, bana bildirin, ne yapabileceğimi göreceğim.


GÜNCELLEME: Ticari WP-Migrate-DB-Pro eklentisinin bir çatal olan WP-Sync-DB eklentisini de buldum . Muhtemelen Veritabanı Senkronizasyonu'ndan daha fazla cilaya sahip olmasına rağmen, çok benzer bir şey yapar .


0

Özellikle bu görev için nispeten yeni bir ticari hizmet var. Buna RAMP denir:

http://alexking.org/blog/2011/07/20/ramp-content-deploy-wordpress


1
Bu hizmetin kullanım
durumuma uymaması

2
Benim kullanım durumum - üretim içerik eklerken işlevsellik eklemek. Alıntı: "Aşağıdaki öğeler şu anda desteklenmemektedir: Ayarlar (RAMP'ye dahil olmadıkları sürece çekirdek ve eklenti ayarları)" Tema ve eklenti seçeneklerinin ve ayarlarının% 99,99'u taşınmayacak. Üretimde kod değişiklikleri yapılmazsa, özel posta türleri taşınmaz. Özel tabloları ve verilerini eklemeyi unutun.
marfarma

1
Bu ürünün geçerli bir kullanım durumu var - içeriği hazırlama ve daha sonra canlı yayınlama. Maalesef endişe ettiğim sorun bu değil. OP'ye geri dönersek, hangi kullanım durumuyla uğraştığı belli değil - bu yüzden dükkanları için mükemmel bir çözüm olabilir.
marfarma
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.