web-dev-qa-db-fra.com

Impossible d'installer ... existe déjà dans la configuration active

On Drupal 8.1 Je continue d'exécuter ce genre de messages lorsque j'essaie d'activer un module personnalisé ou une fonctionnalité personnalisée qui apporte des modifications à la page de base. (Ajouter des champs).

C'est vraiment ennuyeux ...

Étapes:

  • Effacer entièrement la base de données
  • allez dans /install.php et choisissez Profil standard
  • Maintenant que le site est en cours d'exécution, accédez à Étendre
  • Sélectionnez Fonction - Page de base

Résultat:

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.

Eh bien oui ... c'est ce que je veux faire: changez ces paramètres par défaut!

Expexted:

Pouvoir installer ma fonctionnalité qui apporte quelques modifications à la page de base.

Ma fonction

Voici ma fonction créer avec le module fonctionnalités

Il ajoute essentiellement deux champs, banner_image et background_image à la page de base

Des dossiers:

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

Pourquoi cette chose simple n'est pas prise en charge? Est-ce un bug? Que dois-je faire pour pouvoir utiliser ma fonction?

15
Guillaume Bois

Avec drush en Ça marche!

[profile_test]$ drush en feature_basic_page -y
The following extensions will be enabled: feature_basic_page
Do you really want to continue? (y/n): y    
feature_basic_page was enabled successfully.   [ok]

EDIT: il existe une meilleure solution maintenant, voir: Comment supprimer un objet de configuration de la configuration active?

1
Guillaume Bois

Avec drush, vous pouvez probablement faire

drush config-delete module_name.settings

supprimer les configurations qui se plaignent

24
GiorgosK

Module trouvé, utilisez le module Installation facile pour purger la configuration active sans utiliser devel ou drush . Cela fonctionne même si vous avez manqué le dossier optionnel et l'option forcée dans les fichiers de configuration de votre module ( yml )

3

Cette chose n'est pas prise en charge car un module ne peut pas remplacer une entité de configuration qui existe déjà avec l'installation de configuration.

Pour ajouter des configurations de mode formulaire et affichage pour un type de nœud déjà existant, vous devez l'implémenter dans le code dans hook_install ().

Ou vous devez d'abord supprimer le type de nœud sur votre site, mais vous devez également supprimer le contenu.

Et non, ce n'est pas un bug, c'est ainsi qu'il est défini pour éviter toute perte de configuration.

3
Berdir

J'ai le même problème pour le site du panthéon. J'ai entré la commande drush

Panthéon: drush @ pantheon.SITENAME.ENVNAME config-delete ERRORNAME

Localsite: drush config-delete ERRORNAME

c'est du travail pour moi.

3
omkar gaonkar

Parfois, les modules ne se désinstallent pas proprement. Essayer de réactiver une version plus récente entraînerait alors ce problème.

Effectuez d'abord une sauvegarde de base de données et exécutez ce qui suit:

drush @site.env sqlq 'DELETE FROM config WHERE name LIKE "%module_name%";'
0
augusto

Si vous souhaitez ajouter des configurations à votre module personnalisé mais qu'elles existent déjà dans la configuration active, et pour une raison quelconque, vous ne pouvez pas utiliser drush pour supprimer ces configurations (dans mon cas, car cela fait partie d'un profil d'installation), et vous êtes sûr il n'y aura pas de problème avec l'écrasement de la configuration, voici une approche pour remplacer ces configurations.

Ajoutez un nouveau dossier dans votre module personnalisé,/config/hook_install et ajoutez vos fichiers config .yml dans ce dossier, puis dans hook_install de votre module.

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
oknate