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


15

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.

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

期限切れ:

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

私の特徴

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

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

ファイル:

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

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


1
アクティブな構成を削除するために使用されるdrupal EasyInstallモジュールを使用する
Karthikeyan Manivasagam

1
+1興味深いモジュール-一見の価値あり-ありがとう@KarthikeyanManivasagam
therobyouknow

回答:


24

ブラシを使えばおそらくできる

drush config-delete module_name.settings

文句を言う構成を削除するには


また、Drupalとの壮大な戦いで、optional/フォルダー内のこれらの構成を移動して、シャットダウンできることを発見しました。しかし、私は...すべての含意を確認していない
ギヨームボワ

@GuillaumeBois:これらのオプションの構成は、既にインストールされている場合、または依存関係が満たされない場合に無視されるという意味です。そのため、モジュールが機能するために設定が必要な場合、さらに問題が発生する可能性があります。
レンラフ

+1ありがとう@GiorgosK(パート1/2):私の場合、このソリューションが機能することがわかりました:開発サイトのWebブラウザーでこのエラーが表示されました: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).サイトコードgitソースとデータベースを別のマシンにセットアップした後。
-therobyouknow

(パート2/2)それを解決するために、lightning_layoutをアンインストールして再インストールしようとしました。drush pm-uninstall lightning_layout動作しましたが、再インストールしようとすると、drush en lightning_layoutこのコマンドラインエラーが発生しました。溶液は、このように:drush config-delete field.storage.node.panelizer とは、モジュールを再度有効にすることができた:drush en lightning_layout
therobyouknow

1
あなたは、「設定」を削除する必要が何をすべきかわからない場合は、構成の正確な名前を取得するには、「drushの設定リスト」を実行してください
ホルヘValvert

3

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

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

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

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


これはとても悲しいです。D7ではこれが可能でした(フィーチャーを介して基本ページにフィールドを追加)。私はまだD8にもあるべきだと思います。あなたはそれが設定の損失を防ぐためだと言いますが、実際には、単に設定(フィールド、重量、ラベルなど)を追加します。独自のカスタムモジュールでもこの​​問題が発生したことに注意してください。
ギヨームボワ

いいえ、追加するだけではありません。ビューとフォームの表示は、単一のノードタイプのすべてのフィールドで共有されます。2つのモジュールがそのファイルを追加しようとした場合、どうなりますか?既にページタイプにある既存のフィールドはどうなりますか?基本的なノードタイプが存在するが、フィールドとは異なる設定である場合はどうなりますか?そのような動作シナリオは定義されていません。スタンドアロン機能の場合は、独自のノードタイプを定義し、この変更を独自のサイトに展開することをお勧めします。7.xのような機能モジュールは不要です。構成をエクスポートしてインポートするだけです。
ベルディール

@berdirこれは非常に興味深いです。したがって、私はこの問題から、ビューとフォームのメモを含むユーザープロファイル機能を作成しようとしています。ユーザーコンテンツタイプが既に存在し、機能がそれを有効にしようとしているため、機能でこれを実行できないと言っていますか?誰かが既存のサイトでプロファイル機能を有効にできるように、機能がこれをオーバーライドできるようにする方法はありますか?
-kaleemclarkson

@kaleemclarksonユーザーはコンテンツタイプではなく、エンティティタイプです。それを行う唯一の方法は、私が説明したことです。フォームを設定し、表示設定を表示するには、機能モジュールのhook_install()にコードを実装する必要があります。または、プロファイルモジュールを使用して、独自のプロファイルタイプをそこで定義します。
ベルディール

3

モジュールを見つけ、使用 簡易インストールアクティブなコンフィギュレーションを消去するためにモジュールをdevelのかdrushを使用せずに。 モジュールの構成ファイル(yml)でオプションのフォルダーと強制オプションを逃した場合でも機能します


1
これは素晴らしいオプションです!今日はこれを使用したばかりで、時間を大幅に節約できました!
rtd1123

3

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

パンテオンサイト:@ pantheon.SITENAME.ENVNAME config-delete ERRORNAMEを削除

ローカルサイト:config-delete ERRORNAMEを削除します

それは私のために働いています。



0

カスタムモジュールに構成を追加したいが、それらが既にアクティブな構成に存在し、何らかの理由でそれらの構成を削除するために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();
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.