Saya mengelola aplikasi web PHP / MySQL open source yang digunakan oleh beberapa sekolah K-12 dan beberapa perguruan tinggi. Saya juga satu-satunya pengembang proyek. Walaupun dulunya lebih dari sekadar pengunduhan sumber dari aplikasi yang dihosting oleh atasan saya, saya telah bekerja selama setahun terakhir untuk menjadikannya sebuah proyek sumber terbuka "nyata", dengan dokumentasi, rilis bernomor, changelog publik, dll.
Saya sedang mencari cara untuk meningkatkan proses peningkatan, dan salah satu area yang berpotensi menyakitkan (terutama untuk sekolah yang kekurangan tenaga TI) adalah perubahan skema database antara rilis. Mereka tidak cenderung sering terjadi atau menjadi perubahan drastis tetapi saya akan menghargai saran tentang prosesnya.
Saat ini, saya mempertahankan skrip instalasi SQL dasar untuk mengatur database dalam instalasi baru. Ini termasuk skema lengkap untuk rilis saat ini; tidak diperlukan tindakan lebih lanjut untuk pemasangan baru. Perubahan yang terjadi di antara rilis disimpan dalam upgrade-$releasever.sql
skrip, dan perlu untuk menjalankan semua skrip pemutakhiran secara bertahap untuk setiap rilis yang dilompati.
Skrip shell tidak cocok, karena banyak pengguna kami beroperasi pada host tanpa akses shell. Karena prioritas lain, skrip pemasang / pemutakhiran berbasis PHP yang rumit tidak mungkin terwujud. Namun, saya ingin melakukan sesuatu dengan skrip PHP berbasis browser untuk menyederhanakan upgrade. Saran tentang cara mendekatinya?
Drupal CMS memiliki solusi menarik untuk masalah Anda. Saya sarankan untuk melihat Drupal secara umum, jika Anda mengembangkan solusi berbasis web menggunakan PHP. Ini adalah PHP CMS favorit saya dan saya akan cukup bias untuk mengatakan itu adalah yang terbaik di luar sana. ;)
Drupal menawarkan pembungkus interaksi database yang cukup canggih. Ini memungkinkan untuk mengabstraksi tipe database aktual dari pengembang modul, sehingga Anda tidak terlalu peduli apakah server menjalankan PostgreSQL, MySQL, dll. Anda juga dapat membuat antarmuka Anda sendiri. Setiap modul wajib menyediakan file module.install yang berisi
hook_schema
danhook_install
.hook_schema
digunakan untuk mendeklarasikan skema tabel untuk modul, saathook_install
menjalankan prosedur instalasi. Arsitektur mendukung gagasan pembaruan juga, jadi jika pengguna telah menginstal modul, kait pembaruan yang tepat dipanggil dan memungkinkan untuk memperbarui skema tabel dengan mudah.Lihatlah: http://drupal.org/node/146862 Bahkan jika Drupal bukan untuk Anda, saya yakin Anda dapat belajar sesuatu dari keputusan arsitektur mereka.
sumber
Kami melakukan ini dengan membuat folder versi. Kami menempatkan semua skrip database di folder itu. Ketika tiba saatnya untuk meluncurkan ini ke pelanggan baru, mereka mendapatkan versi terbaru.
Kami juga menyimpan skrip pemutakhiran di folder ini. Dengan begitu kita dapat memigrasikan pelanggan dari versi x ke versi y.
Itu bukan metode terbaik ... tapi itu berhasil untuk kita.
sumber