it-swarm-tr.com

Üçüncü taraf uzantılar tarafından yapılan veritabanı değişikliklerini tespit etmenin bir yolu var mı?

Bir geliştirme/hazırlama/üretim ortamında çalışıyorum ve özellikle Joomla ve diğer üçüncü taraf yazılımlara yükseltme gerektiğinde, kodu bir ortamdan diğerine yükseltmek için bazı zorluklar yaşıyorum.

Belirli bir tarihten bu yana hangi sql deyimlerinin veritabanına karşı çalıştırıldığını bulmanın bir yolu var, böylece her ortamı yükseltmek zorunda kalmadan bunları farklı ortamlarda uygulayabilir miyim?

7
ContextSwitch

Basit cevap hayır.

Genişletilmiş yanıt mysql sorguları günlüğe kaydedebilir, ancak sınırları vardır ve ortamlar arasında bir fark olsa bile bu sorguların çalışmamasına yol açacaktır. Hatta bunu yapmanın tek yolu sunucunun kendisi olsa da, bildiğim kadarıyla JDatabase'e özel bir günlük kaydı eklenmedi (Ayrıca bir bileşen JDatabase kullanmıyorsa, kontrol daha da azalır).

Yukarıdakilerle mükemmel bir dünyada görebilirsiniz, bir yol var, ancak geliştiriciden yaşamaya geçerseniz, şu anda kendi başına sorgu yapan bir canlı siteniz vardı ve o zaman mevcut geliştiriciden/evrelemeden "farklı" sürümü. Dolayısıyla, bir kullanıcı canlı siteye kaydolduysa ve Joomla'yı geliştirmede yükselttiyseniz, kullanıcı tablosundaki güncelleme bu kullanıcıyı manuel olarak yeniden ekleme gereğini ekler (tablo yapısında da değişiklikler olabilir). Şimdi onun bir kullanıcı değil, 10, hatta 100 olduğunu hayal edin ve süreç otomatikleştirilemez.

Joomla, tablolarda sürüm mysql güncellemesi için bir sürüme izin veren bazı Güzel güncelleme özelliklerine sahiptir, bu, tabloların sorguların ihtiyaç duyduğu yapıyı korumasını sağlar, ancak tablolardaki herhangi bir eki veya güncellemeyi izlemez, bu nedenle bir dev ortamında güncelleme yaparsanız , üretimde güncelleme yapmanın en iyi yolu aynı adımları izlemektir ve üretiminizde de güncelleme yapmaktır.

Gelecekte, Joomla'nın kendi veritabanındaki veritabanı değişikliklerini izlemesi mümkün olabilir, bu da bir üretim sürümünü bir geliştirme sürümüyle senkronize etmenize izin verir, ancak böyle bir şey oluşturmak için gereken çalışma miktarı çılgındır ve performans üzerinde bir etkisi olacaktır. Şu anda bunun için bir plan olduğuna inanmıyorum ya da herhangi bir plan olmalı.

9
Jordan Ramstad

Veritabanları, tüm yazılım geliştirmelerinde büyük bir sorun olma eğilimindedir. Özellikle sahneleme ve üretim sahalarında işleri bizim için önemli bir acı olarak tutmak.

Son zamanlarda bakmaya başladığım ama henüz uygulanmadığım bir şey:

http://phinx.org/

Başka bir 'kötü adamın yolu', DB şemalarını dışa aktarmaktır (şemalardan endişe ediyorsanız, veriler muhtemelen farklı bir hayvandır) ve sonra her veritabanı için şemalarda bir fark çalıştırmaktır. Oldukça kolay arasındaki farkları ortaya çıkarmalı. O zaman yapmanız gereken veri konsolidasyonu var. Bununla söylemek isterim ki, ideal olarak sadece üretim ortamınızdaki veriler hakkında endişelenmeniz ve hazırlama ortamıyla senkronize kalmanız gerekir. Sonra gerektiğinde sandbox ve geliştirme oynayabilirsiniz.

4
Chad Windnagle