Açık kaynaklı proje sürümlerinde veritabanı şeması değişikliklerini yönetme


9

Birkaç K-12 okulu ve bazı kolejler tarafından kullanılan açık kaynaklı bir PHP / MySQL web uygulamasını yönetiyorum. Ayrıca projenin tek geliştiricisiyim. İşverenimin barındırdığı bir uygulamanın kaynak indirme işleminden biraz daha fazlası olsa da, geçen yıl bunu dokümantasyon, numaralı sürümler, kamu değişim günlükleri vb. İle "gerçek" bir açık kaynak projesine dönüştürmek için çalıştım.

Yükseltme sürecini iyileştirmeye çalışıyorum ve potansiyel olarak acı verici alanlardan biri (özellikle BT uzmanlığı açlık çeken okullar için), sürümler arasındaki veritabanı şemasındaki değişikliklerde. Sık sık olma eğilimi göstermezler veya sert değişiklikler olmazlar, ancak süreç hakkındaki önerileri takdir ediyorum.

Şu anda, yeni bir kurulumda veritabanını kurmak için temel bir SQL kurulum komut dosyası tutuyorum. Bu, mevcut sürüm için tam şemayı içerir; yeni kurulum için başka bir işlem yapılması gerekmez. Sürümler arasında meydana gelen değişiklikler upgrade-$releasever.sqlkomut dosyalarında saklanır ve atlanan tüm sürümler için tüm yükseltme komut dosyalarının adım adım çalıştırılması gerekir.

Shell komut dosyaları iyi bir uyum değildir, çünkü kullanıcılarımızın çoğu kabuk erişimi olmayan ana bilgisayarlarda çalışır. Diğer öncelikler nedeniyle, PHP tarayıcısı tabanlı karmaşık bir yükleyici / yükseltme komut dosyasının gerçekleştirilmesi olası değildir. Ancak, yükseltmeleri basitleştirmek için tarayıcı tabanlı bir PHP betiği ile bir şeyler yapmak istiyorum. Nasıl yaklaşacağınıza dair öneriler?

Yanıtlar:


3

Benim proje onlar yazılımın yeni sürümünü yükledikten sonra kullanıcı kendi tarayıcısı üzerinden çalıştığı bir update.php dosyası vardır. Bu güncelleştirme komut dosyası, etkin veritabanındaki bir tabloda tutulan bir veritabanı sürüm numarasını denetler ve veritabanı şemasını en son sürüme getirecek tüm veritabanı değiştirme işlemlerini yapar ve bu veritabanı sürüm numarasının güncellenmesini içerir.


Upgrade.php betiğinize baktım ve aklımdaki gibi görünüyor. Teşekkürler.
Michael

2

Drupal CMS'nin probleminize ilginç bir çözümü var. PHP kullanarak web tabanlı çözümler geliştiriyorsanız, genel olarak Drupal'a göz atmanızı öneririm. Bu benim en sevdiğim PHP CMS ve orada en iyi olduğunu söylemek için önyargılı olacak. ;)

Drupal oldukça karmaşık veritabanı etkileşimi sarmalayıcısı sunar. Modül geliştiricisinden gerçek veritabanı türünü soyutlamaya izin verir, böylece sunucunun PostgreSQL, MySQL, vb. Çalıştırıp çalıştırmadığını umursamıyorsunuz. Her modül hook_schemave içeren module.install dosyasını sağlamak için gereklidir hook_install. kurulum prosedürünü çalıştırırken hook_schemamodül için tablo şemasını bildirmek için kullanılır hook_install. Mimari, güncelleme kavramını da destekler, bu nedenle kullanıcı modülü zaten yüklediyse, doğru güncelleme kancaları çağrılır ve tablo şemasını kolayca güncellemeye izin verir.

Bir göz atın: http://drupal.org/node/146862 Drupal sizin için olmasa bile, mimari kararlarından bir şeyler öğrenebileceğinizden eminim.


0

Bunu sürüm klasörleri oluşturarak yaptık. Tüm veritabanı komut dosyalarını bu klasöre yerleştirdik. Bunu yeni bir müşteriye sunma zamanı geldiğinde en son sürümü aldılar.

Ayrıca yükseltme klasörlerini bu klasörde tuttuk. Bu şekilde bir müşteriyi x sürümünden y sürümüne geçirebiliriz.

Bu en iyi yöntem değil ... ama bizim için işe yaradı.


Anlıyorsam, bu şu anda nasıl işlediğime benziyor - kullanıcılarımı yükseltme komut dosyalarını kendileri ve doğru sırada çalıştırmaktan sorumlu tutuyor.
Michael
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.