Yapılandırmayı içe / dışa aktarma dışında bırak


16

Bunun yeni Yapılandırma yönetim sisteminin basit bir kullanım örneği olduğunu düşündüm, ancak bunu nasıl çözeceğimizi öğrenmede şansım olmadı:

Sorun

Git'te yapılandırmayı depolamak ve geliştirme sırasında yapılandırmayı dışa aktarmak için drush kullanmak ve ardından dağıtımda yapılandırmayı içe aktarmak istiyorum. Drupal 7'de bir özellik geri döndürmeye oldukça benzer. Benim sorunum, erişim kodlarını git için çeşitli entegrasyonlar için saklamak istemiyorum. Bu, bu yapılandırmaların
$ drush cim -y

Nereye baktım

İthalat / ihracat hariç tutulması gereken yapılandırmalar için basit bir liste / yapılandırma olacağını umuyordum. Bir noktada varmış gibi görünüyor, ancak şu anda Drupal 8 sürümünde mevcut olduğu için tekrar kaldırılması gerekiyor.

Yapılandırma değişikliklerinin, aktif ve senkronizasyon düzenini karşılaştırarak değişiklikleri kaldırabileceğim bir yer olup olmadığını görmek için nasıl yapıldığına baktım, durum böyle değildi. Yapılandırmanın kendi yapılandırmasını içermediği için nasıl içe aktarıldığına baktım, ancak bu genişletilebilir gibi görünmüyordu. Baktım ConfigEvents, ama hepsi bir ithalattan sonra gerçekleşiyor gibi görünüyor, bu yüzden bu kullanılabilir gibi görünmüyor.

Bir şey mi eksik veya yapılandırmaları içe / dışa aktarmanın dışında bırakmak mümkün değil mi?

Yanıtlar:


7

Özellikle dışlamak mümkün değil , ama bir şey var.

Drupal 7'deki $ conf gibi, settings.php'de yapılandırmada yerel olarak geçersiz kılmak için kullanabileceğiniz $ config var. Biçimi $config['name.of.config']['nested']['key'].

Konfigürasyonda saklanan her şeyin hala git'de olduğuna dikkat edin, bu nedenle ya hiçbirini ya da test erişim kodlarınızı git'de tutmanız gerekir. Ayrıca, UI, yapılandırmada gerçekte nelerin depolandığını gösterecek ve şu anda geçersiz kılındığına dair herhangi bir gösterge vermeyecektir. Bunu iyileştirmek için bekleyen sorunlar var.

Bunun bir sınırlaması olduğunu anlıyorum, ancak şu anda dışa aktarılan yapılandırmanın dışında bir şey tutmak mümkün değil. Bildiğim kadarıyla.


Temel olarak, arayüzü kullanmak yerine settings.php dosyanızda yapılandırmayı ayarlamanız / güncellemeniz gerekir.
googletorp

Evet, bu yeni bir şey değil. Bu bağlamda d8'deki iş akışında hiçbir şey değişmedi.

11

"Config Ignore" modülünü kullanabilirsiniz: https://www.drupal.org/project/config_ignore

Bir drim cim yaparken sitenizin yapılandırmasının dosya sistemindeki yapılandırma tarafından geçersiz kıldığını hiç deneyimlediniz mi?

Artık değil!

Bu modül, istediğiniz yapılandırmayı yerinde tutmanıza izin veren bir araçtır.


2
config_ignore muhtemelen şu anda mevcut olan en kararlı ve basit çözümdür ve bu çözüm muhtemelen OP'nin "içe aktarma / dışa aktarmada hariç tutulması gereken yapılandırmalar için basit bir liste / yapılandırma" isteğine en iyi hitap eder
bdanin

7

Bunun için config_ignore ve config_split birleşimlerini kullanabilirsiniz .

Config ignore, içe aktarma sırasında yapılandırma varlıklarının bir alt kümesini yok saymanıza olanak tanır (2.x sürümünden bu yana silinmeleri de önler). Maalesef dışa aktarma sırasında yapılandırmanın hariç tutulmasını engellemiyor.

Dışa aktarma sırasında yapılandırma varlıklarını hariç tutmak için config_split kullanabilir, yeni bir config_split varlığı oluşturabilir ve klasörü boş bırakabilirsiniz. Bu, yapılandırmanın dosya sistemine aktarılmasını önler; bunun yerine veritabanına aktarır.

Bu konu hakkında Drupal 8'de yapılandırma yönetiminden Hariç tut yapılandır yazdım .


5

Yapılandırmaları bölmek için https://www.drupal.org/project/config_split kullanabilirsiniz .

Filtrelenmiş yapılandırmayı almak ve vermek için bir Drupal konsol komutu sağlayan config_split komutunu girin. Drush entegrasyonu yakında gerçekleşecek (tüm filtreden sonra --skip-modül drush filtresinden esinlenerek).

Dışa aktarma işlemlerini farklı dizinlere bölebilirsiniz.

Drupal con dublin 2016'da CMI girişiminden sorumlu kişiler tarafından ne olursa olsun kontrol etmenizi istediğim çok güzel bir sunum vardı .


2

Ben sadece # 1 cevap @berdir test ve mükemmel çalışır. Sadece küçük bir not ekliyorum: bu var, tüm config koymak gerekir. Buna rağmen, $ config var düzgün çalışmıyor.

Bunun gibi bir şey:

 $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',
);

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

Yukarıdaki belgelere dikkat edin: "settings.php içinde $ config üzerinden geçersiz kılınan değerlerin Drupal yönetim arayüzünden görüntülenemeyeceğini unutmayın."


3
Bunu yapmak zorunda değilsiniz. Tanımladığınız değerlerle birleşmelidir, ancak bazı yapılarda beklendiği gibi çalışmayabilir.
Berdir

Oh, doğru çalıştırmayı başaramadım. Tekrar hata ayıklamaya çalışacağım ve eğer doğru çalıştırılmazsa belki d.org'da bir hata açabilirim. Teşekkürler!
estoyausente

1
Gibi bir şey yapabileceğinizi onaylayabilirim$config['module.settings']['some']['value'] = 'foo';
googletorp

2

Kimsenin neden Drush CMI araçlarından bahsetmediğini biraz merak ediyorum . Sihirli kelimeler drush cexyve config-ignore.yml. Ayarlayabileceğiniz bir listeniz olacak. Blok tabanlarının işlenmesi sırasında blok örneklerinin hariç tutulması için bir kez ihtiyacımız vardı.

Tüm yapılandırmayı dışa aktarmak istiyoruz, ancak belirli kalıpları hariç tutmak istiyoruz.

İşte bu noktada --ignore-listseçenek drush cexydevreye giriyor.

Projemizde bir ./drush klasörü var, bu yüzden config-ignore.yml dosyasına aşağıdaki gibi içerik içeren bir dosya yapıştırıyoruz .

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.*

Şimdi biz koşmak drush cexyşöyle

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

Bunun için etkin yapılandırmayı dışa aktarın ve ardından istenmeyen yapılandırmayı kaldırmak için yoksay listesini uygulayın.

Şimdi koştuğunuzda git statussadece yapmak istediğiniz değişiklikleri görmelisiniz.

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

Kurulum

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

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


1

Yapılandırma bölmesini kullanma (önerilir)

Yapılandırma bölünmüş modülü bu ihtiyacı için özel olarak yapıldı.

Config split, drush ile entegredir.

Yalnızca Drush'ı kullanma

Drush da --skip-modulesbayrağını kullanarak bunu yapabilmesi gerekiyordu .

Projenizi otomatik olarak yapmak için projenizin web kökündeki bir drupal / drushrc.php dosyasına aşağıdaki satırları ekleyebilirsiniz.

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

Bkz. Http://www.drush.org/tr/master/config-exporting/#ignoring-development-modules

Ne yazık ki bu işlevsellikte bir hata var: https://github.com/drush-ops/drush/issues/1820 . Şu an için bu yapılandırma dosyalarını .gitignore klasörünüze eklemeniz gerekir, böylece dışa aktarılan yapılandırma dosyaları işlenmez. Yapılandırma bölünmesi lehine belki de bu (buggy) işlevselliği acele etmekten vazgeçmeye devam ediyorlar.


2
Git'deki config dosyalarını yoksaymak tam olarak çalışmaz. Dışa aktarılmayan yapılandırma silinecek. Örneğin, config içe aktarıldıktan sonra özel panel sayfaları silinir.
dobrzyns

@ user157272 ['config-import'] ['skip-module'] ile drush kullanarak içe aktarsanız bile?
gagarine

drushrc.php webroot'un dışına bile yerleştirilebilir. Örneğin, bir düzey daha yüksek; bu, bir besteci kurulumunda Drupal ile çalışırken kullanışlıdır: github.com/drupal-composer/drupal-project .
leymannx

Bu benim için işe yaramadı. Modüller ekledim, ancak yine de etkinleştirme / devre dışı bırakma modülleri yapılandırmasına eklendi.
Jeremy John

Cevabı şu anki en iyi uygulama ile güncelledim (config split)
gagarine
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.