Yüklenemiyor… etkin yapılandırmada zaten var


15

Drupal 8.1'de, temel sayfada bazı değişiklikler yapan özel bir modülü veya özel bir özelliği etkinleştirmeye çalıştığımda bu tür mesajlarda çalışmaya devam ediyorum. (alan ekle).

Gerçekten sinir bozucu ...

Adımlar:

  • Veritabanını tamamen temizle
  • /install.php adresine gidin ve Standart profil'i seçin
  • Artık site çalışıyor.
  • Özellik Seç - Temel sayfa

Sonuç:

Unable to install Feature - Basic Page, core.base_field_override.node.page.promote, core.entity_form_display.node.page.default, core.entity_view_display.node.page.default, core.entity_view_display.node.page.teaser, field.field.node.page.body, node.type.page already exist in active configuration.

Evet ... yapmak istediğim bu: Bu varsayılan ayarları değiştir!

expexted:

Temel sayfada bazı değişiklikler yapan özelliğimi kurabiliyorum.

Özelliğim

İşte benim Özellik özellikleri modülü ile oluşturmak

Temel olarak temel sayfaya banner_image ve background_image olmak üzere iki alan ekler

Dosyalar:

config
    install
        core.base_field_override.node.page.changed.yml
        core.base_field_override.node.page.created.yml
        core.base_field_override.node.page.promote.yml
        core.base_field_override.node.page.status.yml
        core.base_field_override.node.page.sticky.yml
        core.base_field_override.node.page.title.yml
        core.base_field_override.node.page.uid.yml
        core.entity_form_display.node.page.default.yml
        core.entity_view_display.node.page.default.yml
        core.entity_view_display.node.page.teaser.yml
        field.field.node.page.body.yml
        field.field.node.page.field_banner_image.yml
        field.field.node.page.field_image.yml
        field.storage.node.field_banner_image.yml
        language.content_settings.node.page.yml
        node.type.page.yml
feature_basic_page.features.yml
feature_basic_page.info.yml

Bu basit şey neden desteklenmiyor? Bu bir hata mı? Özelliğimi kullanabilmek için ne yapmalıyım?


1
Etkin yapılandırmaları kaldırmak için kullanılan drupal EasyInstall modülünü kullanın
Karthikeyan Manivasagam

1
+1 ilginç modül - bir göz atmaya değer - teşekkür ederim @KarthikeyanManivasagam
therobyouknow

Yanıtlar:


24

Drush ile muhtemelen yapabilirsiniz

drush config-delete module_name.settings

şikayet eden yapılandırmaları silmek için


Drupal'a karşı yaptığım destansı savaşım sırasında bu yapılandırmaları bir optional/klasörde kapatabileceğinizi de fark edebildim . Ama tüm çıkarımlardan emin değilim ...
Guillaume Bois,

@GuillaumeBois: imaları, bu opsiyonel konfigürasyonların önceden kurulmuşsa veya bağımlılıklar karşılanmıyorsa dikkate alınmayacağıdır. Bu nedenle, modülün çalışması için yapılandırma gerekliyse başka sorunlara yol açabilir.
17:23

+1 teşekkür ederim @GiorgosK (Bölüm 1/2): Bu çözümü benim durumumda buldum: geliştirici sitem için web tarayıcısında gösterilen bu hatayı aldım: Warning: in_array() expects parameter 2 to be array, null given in lightning_layout_block_alter() (line 91 of modules/contrib/lightning_layout/lightning_layout.module).site kodumu ayarladıktan sonra git kaynak ve veritabanını başka bir makinede .
therobyouknow

(Bölüm 2/2) Bu yüzden çözmek için lightning_layout'u kaldırmayı ve yeniden yüklemeyi denedim. drush pm-uninstall lightning_layoutçalıştı ama sonra yeniden yüklemeye çalıştığımda drush en lightning_layoutbu komut satırı hatası aldım "PreExistingConfigException.php satır 65: lightning_layout tarafından sağlanan yapılandırma nesneleri (field.storage.node.panelizer) zaten etkin yapılandırmada var" Bu yüzden kullandım böylece çözüm: drush config-delete field.storage.node.panelizer ve daha sonra modülü yeniden etkinleştirebildi:drush en lightning_layout
therobyouknow

1
hangi "ayarları" silmeniz gerektiğinden emin değilseniz, yapılandırmanın tam adını almak için "drush config-list" komutunu çalıştırmalısınız
Jorge Valvert

3

Bir modül, install config ile zaten var olan bir config objesinin yerini alamayabileceğinden bu şey desteklenmez.

Zaten var olan bir düğüm türü için form ve görünüm modu yapılandırmaları eklemek için, bunu hook_install () içindeki kodda uygulamanız gerekir.

Ya da önce sitenizdeki düğüm türünü silmeniz gerekir, ancak içeriği de silmeniz gerekir.

Ve hayır, bu bir hata değil, konfigürasyon kaybını önlemek için bu şekilde tanımlanıyor.


Bu çok üzücü. D7'de bu mümkün oldu (bir Özellik aracılığıyla temel sayfaya alanlar ekleyin). Hala D8'de olması gerektiğini düşünüyorum. Bunun konfigürasyon kaybını önlemek olduğunu söylüyorsunuz, ancak gerçekte sadece konfigürasyonlar ekler (alanlar, ağırlık, etiket vb.). Kendi özel modüllerimle de bu sorunu yaşadığımı unutmayın.
Guillaume Bois

Hayır, sadece eklemekle kalmıyor. görünüm ve form ekranları tek bir düğüm türünün tüm alanlarında paylaşılır. iki modül bu dosyayı eklemeye çalışırsa kim kazanacak? Sayfa türünde bulunan mevcut alanlar hakkında ne olur? temel düğüm türü mevcutsa ancak alanınızdakinden farklı ayarlara sahipse ne olur? Bunun gibi davranış senaryoları tanımlanmamıştır. Bağımsız bir özellik için kendi düğüm türünüzü tanımlamaktan daha iyidir ve bu değişikliği kendi sitenize dağıtmak için 7.x gibi bir özellik modülüne ihtiyacınız yoktur, yapılandırmayı dışa aktarabilir ve tekrar içe aktarabilirsiniz.
Berdir

@berdir bu çok ilginç. Bu nedenle, görünüm ve form notlarını içeren bir kullanıcı profili özelliği oluşturmaya çalışmaktan bu sorundan geliyorum. Yani, kullanıcı içerik türü zaten mevcut olacak ve özellik bunu etkinleştirmeye çalıştığı için bunun özelliklerde yapılamayacağını mı söylüyorsunuz? Bir kişinin zaten mevcut bir sitede bir profil özelliğini etkinleştirebilmesi için bir özelliğin bunu geçersiz kılmasına izin vermenin bir yolu var mı?
kaleemclarkson

@kaleemclarkson kullanıcısı içerik türü değil varlık tipidir. Bunu yapmanın tek yolu, anlattığım şey, form ve görünüm görüntüleme yapılandırmasını ayarlamak için özellik modülünüzün hook_install () kodunu uygulamanız gerekir. Veya profil modülünü kullanın ve orada kendi profil türünüzü tanımlayın.
Berdir

3

Bulunan modül, devel veya drush kullanmadan aktif yapılandırmayı temizlemek için Kolay Kurulum modülünü kullanın . Modülünüzün yapılandırma dosyalarındaki ( yml ) isteğe bağlı klasörü ve zorunlu seçeneği kaçırmış olsanız bile çalışır


1
Bu harika bir seçenek! Bunu bugün kullandım ve çok zaman kazandım!
rtd1123

3

Panteon sitesi için de aynı sorun var. Drush komutuna girdim

Panteon sitesi: drush @ pantheon.SITENAME.ENVNAME config-delete ERRORNAME

Yerel site: drush config-delete ERRORNAME

benim için iş.



0

Özel modülünüze yapılandırma eklemek istiyorsanız, ancak etkin yapılandırmada zaten varlar ve bazı nedenlerden dolayı bu yapılandırmaları silmek için drush'ı kullanamazsınız (benim durumumda bir yükleme profilinin parçası olduğu için) ve eminiz yapılandırmanın üzerine yazmakla ilgili bir sorun olmayacak, işte bu yapılandırmaları değiştirmek için bir yaklaşım.

Özel modülünüze yeni bir klasör ekleyin, / config / hook_install ve config .yml dosyalarınızı bu klasöre, sonra da modülünüzün hook_install dizinine ekleyin.

use Drupal\Component\Serialization\Yaml;

/**
 * Implements hook_install().
 */
function mymodule_install() {

  // Replace these configs.  We're using code to do this, as they are already
  // installed.
  $config_files = [
    'language.types',
    'language.negotiation',
  ];

  foreach ($config_files as $config_id) {
    $raw_data = file_get_contents(drupal_get_path('module', 'mymodule') . '/config/hook_install/' . $config_id . '.yml');
    \Drupal::configFactory()->getEditable($config_id)
      ->setData(Yaml::decode($raw_data))
      ->save();
  }
}

0

Bazen modüller temiz bir şekilde kaldırılmaz. Daha yeni bir sürümü yeniden etkinleştirmeye çalışmak bu soruna neden olur.

Önce bir DB yedeklemesi yapın ve aşağıdakileri çalıştırın:

drush @site.env sqlq 'DELETE FROM config WHERE name LIKE "%module_name%";'
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.