Kecualikan konfigurasi dari impor / ekspor

16

Saya pikir ini adalah kasus penggunaan sederhana dari sistem manajemen Konfigurasi baru, tetapi saya belum beruntung menemukan cara untuk menyelesaikan ini:

Masalah

Saya ingin menyimpan konfigurasi di git dan menggunakan drush untuk mengekspor konfigurasi selama pengembangan dan kemudian pada penyebaran, impor konfigurasi. Cukup mirip dengan melakukan fitur revert di Drupal 7. Masalah saya adalah saya tidak ingin menyimpan kode akses di git untuk berbagai integrasi. Ini mengakibatkan konfigurasi ini dihapus pada
$ drush cim -y

Di mana saya melihat

Saya berharap akan ada daftar / konfigurasi sederhana untuk konfigurasi yang harus dikecualikan pada impor / ekspor. Tampaknya ada beberapa titik tetapi pasti telah dihapus lagi, karena tersedia pada rilis Drupal 8 saat ini.

Saya melihat bagaimana perubahan konfigurasi dibuat membandingkan storange aktif dan sinkronisasi untuk melihat apakah ada tempat di mana saya bisa menghapus perubahan, ini tampaknya tidak terjadi. Saya melihat bagaimana drush melakukan impor konfigurasi karena memiliki beberapa konfigurasi tidak termasuk itu sendiri, tetapi tidak terlihat seperti ini dapat diperluas. Saya melihat ConfigEvents, tetapi semua ini tampaknya terjadi setelah impor, jadi sepertinya ini tidak dapat digunakan.

Apakah saya kehilangan sesuatu, atau apakah tidak mungkin hanya mengecualikan konfigurasi dari impor / ekspor?

googletorp
sumber

Jawaban:

7

Tidak mungkin memiliki pengecualian secara khusus, tetapi ada sesuatu.

Sama seperti $ conf di Drupal 7, ada $ config di settings.php yang dapat Anda gunakan untuk mengganti apa pun dalam konfigurasi secara lokal. Formatnya adalah $config['name.of.config']['nested']['key'].

Perhatikan bahwa apa pun yang disimpan dalam konfigurasi masih dalam git, jadi Anda tidak perlu menyimpannya atau kode akses pengujian Anda di git. Selain itu, UI akan menunjukkan apa yang sebenarnya disimpan dalam konfigurasi dan saat ini tidak akan memberikan indikasi bahwa itu ditimpa. Ada masalah yang tertunda untuk meningkatkannya.

Saya mengerti bahwa ini memiliki batasan tetapi saat ini, tidak mungkin untuk menjaga sesuatu dari konfigurasi yang diekspor. Sejauh yang aku tahu.

Berdir
sumber
Jadi pada dasarnya, Anda harus mengatur / memperbarui konfigurasi di file settings.php Anda daripada menggunakan antarmuka.
googletorp
Ya, ini bukan hal baru. Tidak ada yang berubah dalam alur kerja dalam konteks ini di d8.
11

Anda dapat menggunakan modul "Config Ignore": https://www.drupal.org/project/config_ignore

Pernah mengalami bahwa konfigurasi situs Anda ditimpa oleh konfigurasi pada sistem file, ketika melakukan cim drush?

Tidak lagi!

Modul ini adalah alat untuk membiarkan Anda menjaga konfigurasi yang Anda inginkan.

Weri
sumber
2
config_ignore mungkin merupakan solusi paling stabil dan sederhana yang saat ini tersedia, dan solusi ini mungkin paling baik mengatasi keinginan OP untuk memiliki "daftar / konfigurasi sederhana untuk konfigurasi yang harus dikecualikan pada impor / ekspor"
bdanin
7

Anda dapat menggunakan kombinasi config_ignore dan config_split untuk ini.

Config diabaikan memungkinkan Anda untuk mengabaikan subset entitas konfigurasi selama impor (juga mencegah penghapusan sejak rilis 2.x). Sayangnya itu tidak mencegah pengecualian konfigurasi selama ekspor.

Untuk mengecualikan entitas konfigurasi selama ekspor, Anda dapat menggunakan config_split, buat entitas config_split baru, dan biarkan folder kosong. Ini mencegah konfigurasi diekspor ke sistem file; alih-alih, ia mengekspornya dalam database.

Saya menulis Kecualikan konfigurasi dari manajemen konfigurasi di Drupal 8 tentang topik ini.

Geert van Dort
sumber
5

Untuk membagi konfigurasi yang dapat Anda gunakan https://www.drupal.org/project/config_split .

Masukkan config_split yang menyediakan perintah konsol Drupal untuk mengimpor dan mengekspor konfigurasi yang difilter. Integrasi Drush kemungkinan akan segera menyusul (setelah semua filter terinspirasi oleh --skip-modules filter drush).

Anda dapat membagi ekspor menjadi direktori berbeda yang kemudian dapat Anda abaikan.

Ada presentasi yang sangat bagus di drupal con dublin 2016 oleh orang-orang yang bertanggung jawab atas inisiatif CMI yang saya anjurkan untuk Anda periksa, apa pun yang terjadi.

Potney Switter
sumber
2

Saya baru saja menguji @berdir dalam jawaban # 1 dan itu berjalan dengan sempurna. Hanya saya menambahkan sedikit catatan: Anda harus meletakkan seluruh konfigurasi di var ini, lengkap. Tanpa itu, $ config var tidak berjalan dengan benar.

Sesuatu seperti ini:

 $config['language.negotiation'] = array(
  'session' => array(
    'parameter' => 'language',
  ),
  'url' => array(
    'source' => 'domain',
    'prefixes' => array(
      'es' => '',
      'pt-br' => '',
    ),
    'domains' => array(
      'es' => 'YourLocalDomain',
      'pt-br' => 'Anotherlocaldomain',
    ),
  ),
  'selected_langcode' => 'site_default',
  'langcode' => 'es',
);

Dokumentasi: https://www.drupal.org/node/1928898

Catatan dari dokumentasi di atas: "Perhatikan bahwa nilai yang dikesampingkan melalui $ config dalam settings.php tidak akan dapat dilihat dari antarmuka administrasi Drupal."

estoyausente
sumber
3
Anda tidak harus melakukan ini. Itu harus menggabungkan nilai apa pun yang Anda tetapkan, tapi mungkin itu tidak berfungsi seperti yang diharapkan dengan beberapa struktur.
Berdir
Oh, saya tidak bisa menjalankannya dengan benar. Saya akan mencoba untuk debug lagi dan jika tidak berjalan dengan benar mungkin saya bisa membuka bug di d.org. Terima kasih!
estoyausente
1
Saya dapat mengonfirmasi bahwa Anda dapat melakukan sesuatu seperti$config['module.settings']['some']['value'] = 'foo';
googletorp
2

Saya agak heran mengapa tidak ada yang menyebutkan alat Drush CMI sekarang. Kata-kata ajaibnya adalah drush cexydan config-ignore.yml. Anda akan memiliki daftar yang dapat Anda sesuaikan. Kami membutuhkannya sekali untuk membuat instance blok dikecualikan sementara pada saat yang sama basis blok diproses.

Kami ingin mengekspor semua konfigurasi, tetapi kami ingin mengecualikan pola tertentu.

Di sinilah --ignore-listopsi drush cexymasuk

Dalam proyek kami, kami memiliki folder ./drush, jadi kami menempelkan file di config-ign.yml mereka dengan konten sebagai berikut.

ignore:
  - field.field.contact_message.*
  - field.storage.contact_message.*
  - contact.form.*
  - core.entity_form_display.contact_message*
  - core.entity_form_display.contact_form*
  - core.entity_view_display.contact_message*
  - core.entity_view_display.contact_form*
  - system.site
  - workbench_email.workbench_email_template.*

Jadi sekarang kita berlari drush cexyseperti itu

drush cexy --destination=/path/to/config-export --ignore-list=/path/to/drush/config-ignore.yml

Jadi yang dilakukan adalah mengekspor konfigurasi aktif, dan kemudian menerapkan daftar abaikan untuk menghapus konfigurasi yang tidak diinginkan.

Jadi sekarang ketika Anda menjalankan git statusAnda hanya akan melihat perubahan yang ingin Anda komit.

Sumber: https://www.previousnext.com.au/blog/introducing-drush-cmi-tools

Instalasi

cd ~/.drush
wget https://raw.githubusercontent.com/previousnext/drush_cmi_tools/8.x-1.x/drush_cmi_tools.drush.inc
drush cc drush

Sumber: https://github.com/previousnext/drush_cmi_tools

leymannx
sumber
1

Menggunakan config split (recommanded)

The Modul config perpecahan dibuat khusus untuk kebutuhan ini.

Split config terintegrasi dengan drush.

Hanya menggunakan Drush

Drush itu juga seharusnya bisa melakukan itu dengan menggunakan --skip-modulesbendera.

Anda dapat menambahkan baris berikut di drupal / drushrc.php di webroot proyek Anda untuk melakukannya secara otomatis.

$command_specific['config-export']['skip-modules'] = array('devel');
$command_specific['config-import']['skip-modules'] = array('devel');

Lihat http://www.drush.org/en/master/config-exporting/#ignoring-development-modules

Sayangnya ada bug dengan fungsi ini: https://github.com/drush-ops/drush/issues/1820 . Jadi untuk saat ini Anda juga perlu menambahkan file-file konfigurasi tersebut di .gitignore Anda sehingga file-file konfigurasi yang diekspor tidak dikomit. Mereka adalah yang sedang berlangsung untuk mungkin meninggalkan fungsionalitas ini (kereta) dari drush dalam mendukung config split.

gagarine
sumber
2
Mengabaikan file config di git tidak sepenuhnya berfungsi. Konfigurasi yang tidak diekspor akan dihapus. Misalnya, halaman panel khusus akan dihapus setelah mengimpor konfigurasi.
dobrzyns
@ user157272 bahkan jika Anda mengimpor menggunakan drush dengan ['config-import'] ['skip-modules']?
gagarine
drushrc.php bahkan dapat ditempatkan di luar webroot. Misalnya satu tingkat lebih tinggi, yang berguna ketika Anda bekerja dengan Drupal dalam pengaturan komposer: github.com/drupal-composer/drupal-project .
leymannx
Ini tidak berhasil untuk saya. Saya menambahkan modul, namun mereka masih ditambahkan ke konfigurasi mengaktifkan / menonaktifkan modul.
Jeremy John
Saya memperbarui jawabannya dengan praktik terbaik saat ini (konfigurasi split)
gagarine