it-swarm-id.com

Menyebarkan Perubahan Kompleks

Kadang-kadang kita perlu menerapkan perubahan yang cukup kompleks ke situs web yang memerlukan perubahan pada basis data (tabel baru atau yang diubah) dan kode sumber dinamis (seperti PHP atau ColdFusion). Apa cara terbaik untuk mengemas dan menyebarkan perubahan ini dengan cepat tanpa merusak semuanya di situs web langsung?

4
Justin Scott

Jawaban singkat: sakit di leher!

Saya harus melakukan ini beberapa kali (dan setiap kali membuat saya ingin lebih memikirkan desain saya pada proyek selanjutnya yang saya lakukan). Apa yang saya lakukan adalah memotong basis kode ke bagian Pengembangan (atau folder, atau server, dll) sehingga saya bisa mengerjakannya secara terpisah untuk memastikan semua bug keluar sebelum pindah ke penempatan. Saya kemudian membuat skrip SQL yang selalu memiliki dua baris pertama yang sama:

DELETE IF EXISTS newDatabaseName;
CREATE DATABASE newDatabaseName;

Ini akan memastikan bahwa skrip menempatkan semuanya ke dalam basis data yang benar-benar segar dan kosong. Sisa skrip akan membuat ulang semua tabel yang saya gunakan kembali dari database lama ke yang baru. Kemudian saya akan membuat tabel baru (atau dimodifikasi) ke dalam database baru. Akhirnya saya akan memindahkan semua data dari server langsung ke server pengembangan. Ini bisa memakan waktu lama tergantung pada berapa banyak data yang Anda pindahkan dan seberapa cepat Anda bisa memindahkannya, jadi saya sarankan Anda memikirkan script dengan hati-hati karena semakin sedikit Anda dipaksa untuk menjalankannya, semakin baik.

Setelah saya menjalankan dan menjalankan basis data pengembangan baru, sisanya adalah membuat kode baru untuk menggunakannya. Setelah itu hilang, maka penyebaran harus relatif mudah (meskipun mungkin memakan waktu). Cukup gunakan skrip yang sama untuk menyalin semua data langsung baru ke database baru di server penempatan, dan salin semua kode baru di sana, dan Anda selesai!

Ini adalah bagaimana saya melakukannya, dan sementara itu menyakitkan, itu berhasil. Jika ada cara yang lebih baik, saya akan senang mendengarkan.

Perbarui: Menanggapi komentar Tchalvak, ya saya biasanya menggunakan yang berikut untuk mendapatkan semua definisi tabel tanpa data aktualnya:

mysqldump --databases --no-data databaseName > newScript.sql

Saya kemudian akan mengubah skrip ini seperti dijelaskan di atas.

3
Mike

Untuk mendapatkan "kemampuan untuk mengembalikan", saya sangat menyarankan untuk mengenal (baik) baik git atau Mercurial(sistem kontrol versi terdistribusi) .

Hari-hari ketika Anda harus bekerja dengan kode sumber Anda dalam file datar sudah berakhir (sekarang Anda harus bekerja dengan itu dalam file datar tetapi memiliki sistem kontrol perubahan yang sangat kuat melacak mereka).

2
Kzqai

Saya biasanya melakukannya (untuk situs gaya LAMP):

  1. tentukan perubahan Anda lalu tulis skrip untuk menerapkannya (saya menggunakan Makefile).
  2. ji perubahan Anda pada sampel data yang mewakili lingkungan nyata
  3. ji lagi untuk memastikan
  4. Beri diri Anda jalan keluar, miliki kemampuan untuk mengembalikan

Jika Anda menjalankan cluster, maka Anda mungkin memiliki sakit kepala yang lebih besar dengan status situs, cache dan sebagainya.

0
Aiden Bell