Saya akhirnya mulai melihat Drupal 8 dengan serius dan saya sangat tertarik dengan manajemen konfigurasi. Saya menemukan sesuatu yang mungkin sedikit bermasalah dan itu menyangkut konten blok khusus.
Saya dapat melihat bahwa sistem manajemen konfigurasi dapat mengekspor konfigurasi blok - wilayah, tema, berat, visibilitas dll. Namun konten blok yang sebenarnya tidak ditemukan dalam ekspor konfigurasi, yang masuk akal dan dapat dimengerti.
Pada mengimpor konfigurasi blok itu ke situs produksi, apa yang tampaknya terjadi adalah konfigurasi blok dibuat dan pesan holding ditempatkan, melaporkan blok rusak atau hilang. Jelas konten blok tidak ada di server produksi.
Bagaimana blok khusus dapat dimigrasikan dari server dev / staging ke server produksi? Saya menyadari bahwa blok di Drupal 8 adalah entitas yang dapat fieldable seperti node dan karenanya perlu dimigrasikan dengan cara yang sama dan saya mengerti ada Migrasi API di Drupal 8 tetapi ini tampaknya dibangun untuk memigrasi konten dari situs Drupal 6 dan 7 ke Drupal 8 berbeda dengan Drupal 8 hingga situs Drupal 8.
Masalah ini khusus mengenai blok khusus karena blok yang dihasilkan oleh modul lain seperti Tampilan jelas akan bermigrasi sebagai konfigurasi.
Jawaban:
Jawaban lain yang belum saya lihat disebutkan di sini adalah dengan menggunakan modul Blok Sederhana , yang cukup banyak identik dengan setup 'Blok Kustom' inti, tetapi alih-alih memiliki hibrida konten + konfigurasi yang aneh, Anda memiliki semua pengaturan dan konten Blok disimpan dalam konfigurasi, yang dapat diekspor dan diimpor secara bersih.
Lihat, untuk diskusi lebih lanjut dalam inti Drupal 8: Blok khusus tidak dapat diekspor dan diimpor dengan benar .
sumber
Saya baru saja menerbitkan modul kontribusi yang menyelesaikan ini. Pada dasarnya, modul menyediakan jenis blok berdasarkan konfigurasi (blok tetap) yang membungkus blok khusus (blok konten). Jika blok konten tidak ada, itu dibuat dengan konten default atau kosong jika tidak ada konten default yang ditetapkan. Semuanya dilakukan melalui UI, tidak ada file khusus atau modul khusus yang diperlukan.
Saya menamainya Memperbaiki konten blok dan diterbitkan di:
https://www.drupal.org/project/fixed_block_content
sumber
Pendekatan lain untuk menjaga konten yang ditambahkan sebagai bagian dari pengembangan juga didorong untuk hidup adalah dengan menggunakan modul Konten Default untuk mengekspor konten. Itu dibangun untuk konten yang akan diekspor ke folder 'konten' profil instalasi, dan kemudian modul, jika diaktifkan, secara otomatis membawa konten ketika situs diinstal, tetapi juga memungkinkan untuk mengimpor konten satu item pada suatu waktu , seperti di hook pembaruan, dengan kode di bawah ini di example.install atau example.profile:
Ekspor blok khusus dengan ID 8:
(Jika Anda tidak menetapkan jalur profil di pengaturan Drush, Anda harus menentukannya di atas.)
Dan gunakan ekspor yang dihasilkan dalam file example.install Anda seperti ini:
http://data.agaric.com/easily-add-content-update-hooks-use-default-content-module-exports-create-content-needs-be-sync-conf
sumber
Saya tidak yakin saya melihat keuntungan kuat dari sinkronisasi konfigurasi blok di antara beberapa lingkungan karena blok begitu terkait dengan konten.
Alasannya adalah karena ada blok baru yang dibuat dari file yml yang tidak memiliki judul / isi (konten) dan karenanya memberikan pesan 'rusak / hilang'.
Anda dapat mencoba membuat UUID (jika Anda ingin membuat blok di kedua tempat - pastikan nama mesin cocok ...) di tabel block_content pengembangan Anda cocok dengan uuid yang Anda miliki dalam produksi (hubungan lain tampaknya menggunakan entitas id). Kemudian, ketika Anda melakukan sinkronisasi konfigurasi, Anda bisa melihat 'Lihat perbedaan' di file yml dan mungkin melihat apa lagi yang perlu Anda ubah pada dev untuk mendapatkannya agar sesuai dengan uuids produksi, dll. Saya dapat ini berfungsi, tetapi masih mengira lebih mudah untuk mengabaikan semua konfigurasi blok Anda dalam kode kecuali Anda melalui proses ini atau membuat semacam sinkronisasi blok basis data untuk Anda sendiri menggunakan block_content, block_content__body, dan block_content_field_data.
Itu tidak terlalu elegan tetapi bisa memungkinkan Anda untuk menyimpan kode konfigurasi Anda dalam kode. Jika tidak, jika Anda terus menggunakan blok dengan konfigurasi, mereka akan selalu 'rusak atau hilang'.
Posting blog lain menyarankan membuat blok khusus di lingkungan langsung tetapi tidak menempatkannya. Setelah menyinkronkan database ke dev, blok khusus dapat dikonfigurasikan, konfigurasi diekspor dan karena sudah ada dalam impor langsung penempatan dimungkinkan.
sumber
Memiliki masalah yang sama dan tidak benar-benar solusi, hanya tambahan: Dalam pengembangan kolaboratif kami menggunakan staging server yang menarik dari repositori dan mengatur ulang semua konfigurasi. Ini berarti bahwa blok config sedang diatur ulang secara otomatis, Anda tidak dapat menempatkan blok yang Anda anggap sebagai "konten" secara langsung di server itu.
Sangat mudah untuk menggunakan sinkronisasi konfigurasi ekspor drush sambil mengetahui dengan tepat apa yang telah Anda lakukan dan yakin bahwa setiap perubahan konfigurasi dimaksudkan untuk digunakan. Tetapi Drupal memutuskan bagi kita bahwa blok adalah konfigurasi (sementara jelas konten blok ditangani sebagai konten). Jadi ini tampaknya rusak oleh desain.
Untuk waktu yang diberikan saya rasa solusi paling praktis adalah dengan menambahkan file yml terkait blok ke .gitignore.
sumber
Saya juga tidak yakin, jika Anda tidak menemukan solusi apa pun, Anda dapat melihat modul ini https://www.drupal.org/project/deploy . Terus terang, saya tidak ingat bisa menggunakan blok dorong dari DEV ke PROD atau tidak.
sumber
Saya pikir cara terbaik untuk menangani ini adalah dengan:
Inilah yang biasanya saya lihat digunakan orang dan saya pribadi gunakan. Tapi itu menyinkronkan seluruh database dibandingkan dengan hanya konten blok.
sumber
Silakan mendapatkan modul Structure Sync .
Tangga:
sumber