Proyek kami menggunakan file konfigurasi khusus pengguna. File ini saat ini tidak dalam kontrol versi, karena ini berbeda untuk setiap pengguna. Masalahnya adalah, setiap kali pengembang menambahkan modul baru yang memerlukan konfigurasi, atau mengubah nama modul yang ada, pengembang lain mendapatkan kesalahan karena file konfigurasi pribadi mereka tidak diperbarui.
Untuk mengatasi masalah ini, kami berpikir untuk bekerja dengan dua file konfigurasi: file konfigurasi global / standar yang akan berada dalam kontrol versi dan akan diperbarui secara berkala oleh setiap pengembang yang menambahkan modul baru, dan file konfigurasi pribadi yang akan dijauhkan kontrol versi dan hanya akan berisi perubahan spesifik pengguna.
Namun, ini sepertinya solusi ad-hoc.
Bisakah Anda mengusulkan solusi yang lebih baik?
Apa yang dilakukan para profesional?
sumber
Jawaban:
Meskipun Anda sudah mendapatkan jawaban yang bagus di sini, kebanyakan dari mereka melewatkan akar penyebab masalah Anda: file konfigurasi pengguna Anda tampaknya berisi lebih dari sekadar informasi spesifik pengguna, mereka juga mengandung informasi (mungkin berlebihan) yang berada di bawah kendali versi di tempat lain , mungkin dalam file yang berbeda, seperti nama modul.
Saya dapat memikirkan dua solusi yang mungkin di sini:
coba pisahkan informasi itu dengan ketat. Misalnya, jangan gunakan nama modul apa pun di konfigurasi pengguna Anda. Gunakan nomor id (misalnya, GUID) untuk merujuk ke modul, dan biarkan nomor id itu tidak pernah berubah setelah ditugaskan ke modul. Tentu saja, itu mungkin memiliki kelemahan bahwa file konfigurasi pengguna Anda kehilangan beberapa kesederhanaan yang mungkin mereka miliki sekarang. Anda mungkin perlu membuat alat GUI untuk mengedit file konfigurasi Anda alih-alih menggunakan editor teks biasa.
berikan file konfigurasi Anda nomor versi, dan setiap kali sesuatu seperti nama modul diubah, berikan nomor versi baru kepada mereka. Kemudian Anda bisa memberikan skrip pemutakhiran yang memeriksa nomor versi, dan jika file konfigurasi tidak mutakhir, itu mengubah semua nama modul yang ditemukan dalam file dan meningkatkan nomor versi setelahnya. Ini bisa otomatis, sehingga proses peningkatan tidak akan mengganggu rekan tim Anda dalam pekerjaan sehari-hari.
EDIT: setelah membaca posting Anda lagi, saya pikir solusi yang Anda anggap wajar, asalkan modul baru ditambahkan, tetapi tidak diganti namanya. Apa yang saya tulis di atas akan memungkinkan untuk mengubah nama modul atau struktur konfigurasi modul yang ada sesudahnya. Tetapi jika Anda tidak membutuhkan itu, saya akan tetap pada solusi yang paling sederhana.
sumber
Ini solusi yang masuk akal.
Anda perlu cara menentukan nilai awal dari setiap elemen konfigurasi baru. Ini harus disimpan di suatu tempat dan file konfigurasi global, hanya-baca, adalah pilihan yang jelas.
Kemudian ketika setiap pengguna mengubah konfigurasi pribadi mereka, Anda menulis perubahan ini ke salinan lokal mereka.
Kode Anda perlu membaca konfigurasi global terlebih dahulu dan yang spesifik pengguna untuk menimpa nilai yang diubah. Ini akan jauh lebih mudah daripada membaca yang lokal dan kemudian mencoba mencari tahu mana yang belum ditetapkan dan karenanya perlu membaca dari file pengaturan global.
Jika Anda menggunakan sesuatu seperti XML untuk penyimpanan maka Anda tidak perlu khawatir tentang menangani case di mana Anda menghapus pengaturan. Mereka tidak akan diminta dari salinan pengguna file dan jika Anda membuat ulang file di save mereka akan dihapus saat aplikasi pertama kali digunakan setelah perubahan.
sumber
Kami memiliki solusi yang agak menarik, kami terutama pengembang PHP, jadi kami menggunakan Phing yang memungkinkan Anda untuk membuat tugas otomatis yang ditulis dalam PHP, jadi alih-alih melakukan pembaruan svn normal kami, kami melakukan "pembaruan phing" yang memanggil pembaruan svn, dan kemudian mengganti konfigurasi kami dengan variabel yang tepat, misalnya, konfigurasi:
Jadi file konfigurasi semua versi dengan sintaks yang menarik, dan kemudian kita menghasilkan file konfigurasi adhoc, tidak berversi untuk contoh spesifik saya, yang menggantikan "variabel" dengan pengaturan tidak berversi yang ditentukan dalam file ini tidak berversi. Dengan cara ini kita dapat memodifikasi file khusus pengguna dan membuat perubahan mengisi seluruh copy pekerjaan lainnya.
sumber
Program harus memiliki pengaturan default dalam kode ketika nilai tidak ditemukan dalam file konfigurasi. Dengan cara ini, hal-hal baru ditambahkan tidak akan rusak, jalur peningkatan Anda akan lebih lancar, dan pengguna Anda akan mundur ketika mereka mengacaukan file konfigurasi juga.
Contoh lain yang lebih kompleks adalah saat startup program atau titik kunci lainnya, buka file konfigurasi menggunakan modul inisialisasi dan tambahkan semua default yang hilang, tetapi ini tampaknya cukup berat.
sumber
Masukkan nomor versi ke dalam file konfigurasi pribadi (nomor versi dari format file config).
Buat kode yang memproses file konfigurasi pribadi periksa nomor versi, dan jika itu sudah ketinggalan zaman, jalankan melalui prosedur pembaruan. Jadi, pada dasarnya, siapa pun yang membuat perubahan yang akan memecah file konfigurasi yang ada perlu menabrak nomor versi dari format file konfigurasi, dan menulis prosedur untuk memperbarui file konfigurasi dari versi sebelumnya (mengganti nama bagian, dll.) Dan menyimpan kembali mereka.
Anda mungkin ingin beberapa proses seperti ini untuk pengguna akhir, jadi sebaiknya Anda menggunakannya untuk membuat hidup pengembang Anda lebih mudah.
sumber
Biasanya cara saya melihatnya dilakukan adalah memiliki file konfigurasi dengan nilai default diperiksa ke dalam repositori. Ini bisa, sebagai contoh, nilai-nilai yang diperlukan pada server pengujian. Kemudian, ketika pengembang memeriksa file, mereka akan memiliki semua nilai. Jika bidang baru ditambahkan atau bidang dihapus, ini ditangani dalam gabungan. Pengembang akan memeriksa nilai yang diperlukan untuk server target dan tidak memeriksa perubahan lain apa pun pada bidang yang ditujukan untuk lingkungan pengembangan pribadinya.
Perlu dipastikan bahwa penggabungan dilakukan dengan benar, tetapi tampaknya cukup aman bagi saya.
sumber
Apa yang kami lakukan di sini adalah membuat blok pengaturan. Ini bisa dilakukan di Zend seperti ini:
Ini berarti bahwa pengujian mewarisi produksi dan memperluasnya dengan key3. Yang perlu dilakukan setiap pengembang adalah mengatur lingkungannya (pengujian atau produksi dalam kasus ini)
sumber
Ini adalah solusi yang berguna berdasarkan pos: Mempertahankan kata sandi dalam kontrol sumber
Singkatnya, strateginya adalah untuk "menyimpan versi terenkripsi file konfigurasi dalam kontrol sumber dan kemudian menyediakan sarana yang dengannya pengguna dapat mengenkripsi dan mendekripsi data itu."
make decrypt_conf
?");sumber
Kami membangun alat yang disebut Config yang menangani masalah konfigurasi seperti ini. Apa yang akan Anda lakukan adalah membuat (atau mengimpor) 1 file konfigurasi utama. Kemudian buat lingkungan yang disebut Lokal. Di lingkungan lokal, buat beberapa instance, 1 instance per pengguna. Jika Anda perlu membuat perubahan yang umum di seluruh papan, seperti menambahkan entri konfigurasi baru atau memodifikasi nama modul, buat saja perubahan, dan itu akan diterapkan di seluruh papan. Jika Anda ingin membuat perubahan instance / pengguna, buat nilai konfigurasi itu sebagai variabel, lalu ubah variabelnya. Perubahan ini hanya akan diterapkan pada instance / pengguna Anda. Semua ini di bawah kontrol versi. Anda menggunakan file konfigurasi melalui push atau pull. Opsi tarikan mirip dengan git pull, tetapi untuk instance / pengguna tertentu.
Config memberi Anda fitur tambahan seperti membandingkan konfigurasi antara pengguna, pencarian, penandaan, validasi, dan alur kerja. Ini SaaS, jadi tidak benar-benar untuk mereka yang belum siap untuk cloud, tetapi kami memiliki rencana di tempat.
sumber