Bagaimana cara menggabungkan perubahan dari salinan pengembangan situs ke situs langsung tanpa kehilangan konten baru?

40

Apa prosedur terbaik untuk menggabungkan pekerjaan yang dilakukan pada salinan pengembangan situs ke salinan produksi langsung? Sering kali ada banyak konten baru yang ditambahkan ke situs sejak pengembangan dimulai pada fitur-fitur terbaru. Dan sebagian besar penambahan situs akan melibatkan perubahan basis data. Jadi menyalin file baru itu mudah, tetapi bagaimana dengan database? Bagaimana Anda menggabungkan perubahan Anda dengan database produksi yang ada tanpa kehilangan konten baru yang ditambahkan sejak terakhir kali Anda memperbarui situs produksi? Apakah ada modul yang membantu ini?

Chaulky
sumber
2
Hapus kebingungan: Gabung & migrasi adalah dua kata yang berbeda. Anda telah menggunakan keduanya dalam pertanyaan Anda. Jika situs langsung kosong, Anda perlu memigrasikan salinan pengembangan ke situs langsung / host. Jika situs langsung sudah memiliki konten, perlu menggabungkan konten baru dari salinan pengembangan ke situs langsung (Penggabungan agak sulit). Apa yang perlu kamu lakukan?
user931

Jawaban:

16

Untuk jenis konten, tampilan, dan perubahan struktur pada situs pengembang lihat menggunakan Fitur untuk mengekspor database ke kode.

Untuk migrasi konten ada banyak pilihan, tetapi bukan solusi tunggal yang solid. Salah satu contoh adalah suite Penerapan .

budda
sumber
suite Demployment jelas terlihat menarik, meskipun masih di Dev (bahkan belum Beta). Sudahkah Anda menggunakannya sendiri? Apakah Anda tahu sesuatu yang tidak akan dibahas?
Chaulky
2

Saya pada dasarnya mengadopsi dua aliran pemikiran di sini (pemikiran ketiga, mengerjakan perbedaan basis data, saya tidak akan membahas karena kompleksitasnya cukup tinggi).

1) Menyebarkan dengan menjatuhkan basis data produksi, dan mengimpor mysqldump dari database pengembangan. Secara opsional, jalankan regex find / replace terlebih dahulu pada tautan absolut apa pun yang dikodekan keras yang mereferensikan URL dev di dump SQL. Setelah mengimpor dev db ke dalam prod, secara otomatis menjalankan pernyataan SQL (biasanya melalui skrip) setelah itu untuk mengubah pengaturan yang berbeda untuk prod daripada dev (misalnya, mungkin Anda memiliki dalam tabel variabel beberapa pengaturan koneksi untuk menghubungkan ke sistem eksternal yang Anda perlu ubah ke titik pada prod sistem eksternal dan bukan pada versi dev).

2) Gunakan modul Fitur , sebagaimana disebutkan oleh budda, untuk pengaturan admin, dan gunakan modul Node Ekspor untuk ekspor / impor konten dalam kombinasi dengan modul Hapus Semua . Jadi alur kerjanya adalah:

  1. gunakan node_export dan fitur untuk mengekspor node / fitur ke file
  2. Opsional (dan semoga) kontrol versi
  3. Muat file pada sistem prod
  4. Gunakan antarmuka drush atau admin untuk memuat fitur
  5. Gunakan drush delete-all atau admin interface untuk menghapus semua node dari jenis yang ingin Anda impor
  6. Gunakan drush ne-import atau antarmuka admin untuk mengimpor node dari file node yang Anda ekspor.

Satu catatan, saya akan sangat menyarankan mengadopsi alur kerja standar, di mana konten berjalan satu arah saja. Entah Dev -> Prod atau Prod -> Dev (Saya lebih suka yang ini).

Saya telah melakukan ini, dan saya melakukan ini pada beberapa sistem besar, dengan hasil yang cukup baik, tetapi akan selalu ada banyak cara untuk mengiris apel ini, pilih cara mana yang paling cocok untuk Anda.

coderintherye
sumber
Dalam opsi 1, bagaimana Anda membuat ulang konten yang telah ditambahkan ke situs langsung yang tidak ada di situs pengembang? Sepertinya Anda menimpa semuanya dengan dev db dan kemudian mungkin mengubah beberapa pengaturan / variabel. Juga, aliran pemikiran mana yang Anda gunakan di situs Anda saat ini? Adakah pro dan kontra untuk setiap pendekatan?
Chaulky
Dalam opsi 1, kami sekarang menggunakan node_export untuk mengirim konten secara teratur (setelah menghapus konten sebelumnya). Kami biasa melakukan perubahan konten pada dev dan prod. Ini sebenarnya adalah skenario umum di beberapa tempat yang pernah saya lihat, meskipun jelas tidak ideal. Inilah sebabnya saya menambahkan, mengadopsi arahan, dan tetap menggunakannya, baik konten menjadi dev -> prod atau prod -> dev, tetapi cobalah untuk tidak melakukan keduanya. Dan ya, pada dasarnya kami menimpa, meskipun lebih suka menghapus dan membangun kembali. Di pekerjaan baru saya, kami melakukan # 2, di pekerjaan lama saya, kami melakukan # 1 tetapi pindah ke # 2 (saya masih berkonsultasi untuk mereka).
coderintherye
1

Database dump dari copy situs langsung & copy pengembangan situs dalam file SQL (gunakan parameter & pengaturan yang sama untuk kedua dump).
Kemudian, bandingkan kedua file SQL menggunakan alat perbandingan kecil, ExamDiff . Ini akan menampilkan perbedaan file berdampingan dengan warna berbeda. Anda dapat langsung melompat ke perbedaan juga (tanpa menggulir). Periksa perbedaannya & tambahkan / edit baris ke file SQL situs langsung. Pastikan tidak ada jalur absolut / URL lingkungan pengembangan di file itu. Itu selesai! Saatnya memulihkan database untuk situs langsung.
Buat hidup Anda lebih mudah:Pada langkah pertama, buang hanya tabel yang diubah. Misalnya, jika Anda telah mengedit modul dalam copy pengembangan yang menargetkan tabel terpisah, buang saja tabel ini. Jika Anda tidak yakin tentang tabel tertentu, seluruh dump database baik-baik saja.

pengguna931
sumber
Teknik ini memiliki keterbatasan parah dalam beberapa keadaan penting. Misalnya, jika situs pengembangan memiliki node baru, maka kedua database Anda akan berisi entri dengan id simpul yang sama, dan itu tidak akan mungkin untuk menyelesaikan referensi dan menggabungkannya dari dump teks dari database sql. Operasi semacam ini lebih baik ditangani melalui fitur dan penyebaran, sebagaimana disebutkan dalam jawaban lain.
greg_1_anderson