Bagaimana mengelola perubahan skema database dalam rilis proyek sumber terbuka

9

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.sqlskrip, 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?

Michael
sumber

Jawaban:

3

Proyek saya memiliki file update.php yang dijalankan pengguna melalui browser mereka setelah mereka menginstal versi baru perangkat lunak. Skrip pembaruan yang memeriksa nomor versi database yang disimpan dalam tabel di database aktif dan apakah setiap database mengubah operasi yang akan membuat skema database hingga yang terbaru, yang termasuk memperbarui nomor versi database itu.

pyasi
sumber
Saya melihat skrip upgrade.php Anda dan itulah yang saya pikirkan. Terima kasih.
Michael
2

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_schemadan hook_install. hook_schemadigunakan untuk mendeklarasikan skema tabel untuk modul, saat hook_installmenjalankan 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.

sneg
sumber
0

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.

Michael Riley - AKA Gunny
sumber
Jika saya mengerti, kedengarannya mirip dengan bagaimana saya menanganinya sekarang - menempatkan pengguna saya untuk menjalankan skrip upgrade sendiri, dan dalam urutan yang benar.
Michael