web-dev-qa-db-ja.com

インストールできません...アクティブな構成にすでに存在します

Drupal 8.1の場合)基本ページに変更を加えるカスタムモジュールまたはカスタム機能をアクティブにしようとすると、このようなメッセージが表示されます(フィールドを追加)。

それは本当に迷惑です...

手順:

  • データベースを完全にクリア
  • /install.phpに移動し、標準プロファイルを選択します
  • サイトが実行されたので、Extendに移動します
  • 機能の選択-基本ページ

結果:

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.

そうですね...それが私がやりたいことです。これらのデフォルト設定を変更してください!

拡張:

基本ページにいくつかの変更を加える私の機能をインストールすることができます。

私の機能

これが Featuresモジュールで作成した私の機能です

基本的に、banner_imageとbackground_imageの2つのフィールドを基本ページに追加します

ファイル:

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

なぜこの単純なものがサポートされていないのですか?バグですか?この機能を使用するにはどうすればよいですか?

15
Guillaume Bois

drush en できます!

[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]

編集:今より良い解決策があります、参照してください: アクティブな構成から構成オブジェクトを削除するにはどうすればよいですか?

1
Guillaume Bois

Drushを使用すると、おそらく

drush config-delete module_name.settings

文句を言う設定を削除する

24
GiorgosK

モジュールが見つかりました。 Easy Install モジュールを使用してアクティブな構成を削除してくださいdevelまたはdrushを使用せずに。モジュールの設定ファイル(yml)でoptional folder and enforced optionを逃した場合でも機能します

モジュールがインストール構成で既に存在する構成エンティティを置き換えることができないため、これはサポートされません。

既存のノードタイプのフォームおよびビューモード設定を追加するには、hook_install()のコードでこれを実装する必要があります。

または、最初にサイトでノードタイプを削除する必要がありますが、次にコンテンツも削除する必要があります。

いいえ、これはバグではありません。これは、構成の損失を防ぐための定義方法です。

3
Berdir

パンテオンサイトにも同じ問題があります。ドラッシュコマンドを入力しました

Pantheonsite:drush @ pantheon.SITENAME.ENVNAME config-delete ERRORNAME

ローカルサイト:drush config-delete ERRORNAME

それは私にとっては仕事です。

3
omkar gaonkar

時々、モジュールはきれいにアンインストールされません。新しいバージョンを再度有効にしようとすると、この問題が発生します。

最初にDBバックアップを実行し、次を実行します。

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

カスタムモジュールに構成を追加したいが、それらがアクティブ構成にすでに存在し、何らかの理由でDrushを使用してそれらの構成を削除できない場合(私の場合、インストールプロファイルの一部であるため)、確実です。設定を上書きしても問題はありません。これらの設定を置き換える方法を次に示します。

カスタムモジュールに新しいフォルダー/ config/hook_installを追加し、そのフォルダーにconfig .ymlファイルを追加してから、モジュールのhook_installに追加します。

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