インポート/エクスポートから構成を除外する


16

これは新しい構成管理システムのシンプルなユースケースだと思いましたが、これを解決する方法を見つけることができませんでした。

問題

gitに構成を保存し、drushを使用して開発中に構成をエクスポートし、展開時に構成をインポートしたい。Drupal 7で機能を元に戻すのとよく似ています。私の問題は、さまざまな統合のためにアクセスコードをgitに保存したくないことです。これにより、これらの構成が削除されます
$ drush cim -y

私が見た場所

インポート/エクスポートで除外する必要がある設定の単純なリスト/設定があることを望んでいました。ある時点であったようですが、現在のDrupal 8リリースで利用可能であるため、再び削除されたに違いありません。

アクティブと同期のストレンジを比較して構成の変更がどのように行われているかを調べて、変更を削除できる場所があるかどうかを確認しましたが、そうではありませんでした。独自の設定を除外する構成があるため、drushがどのように構成をインポートするかを調べましたが、これが拡張可能であるようには見えませんでした。私は見てConfigEventsいたが、これらはすべてインポート後に発生するようであるため、これを使用できるようには見えません。

何かが足りないのですか、それともインポート/エクスポートから設定を単純に除外することはできませんか?

回答:


7

具体的に除外することできませんが、何かあります。

Drupal 7の$ confと同様に、settings.phpには$ configがあり、これを使用してローカルの設定を上書きできます。形式は$config['name.of.config']['nested']['key']です。

構成に保存されているものはすべてgitにあるため、何も保持しないか、テスト用のアクセスコードをgitに保存する必要があります。また、UIはconfigに実際に保存されているものを表示し、現在、それがオーバーライドされていることを示すことはありません。それを改善するための保留中の問題があります。

これには制限があることを理解していますが、現時点では、エクスポートされた構成から何かを排除することはできません。私の知る限りでは。


したがって、基本的には、インターフェースを使用する代わりに、settings.phpファイルで構成を設定/更新する必要があります。
googletorp

はい、これは新しいことではありません。d8のこのコンテキストのワークフローでは、何も変更されていません。

11

「Config Ignore」モジュールを使用できます。 https //www.drupal.org/project/config_ignore

Drush Cimを実行しているときに、サイトの構成がファイルシステムの構成によって上書きされることを経験したことがありますか?

もう違います!

このモジュールは、必要な構成を所定の場所に保持するためのツールです。


2
config_ignoreはおそらく現在利用可能な最も安定したシンプルなソリューションであり、このソリューションはおそらく「インポート/エクスポート時に除外されるべきコンフィグのシンプルなリスト/設定」
-bdanin

7

config_ignoreconfig_splitの組み合わせを使用できますこれに。

Config ignoreを使用すると、インポート中に構成エンティティのサブセットを無視できます(2.xリリース以降の削除も防止されます)。残念ながら、エクスポート中に設定を除外することはできません。

エクスポート中に構成エンティティを除外するには、config_splitを使用し、新しいconfig_splitエンティティを作成して、フォルダーを空のままにします。これにより、構成がファイルシステムにエクスポートされなくなります。代わりに、データベースにエクスポートします。

このトピックについて、Drupal 8の構成管理から構成を除外するを書きました。


5

設定を分割するには、https://www.drupal.org/project/config_splitを使用できます

config_splitを入力します。これは、フィルターされた構成をインポートおよびエクスポートするためのDrupalコンソールコマンドを提供します。Drushの統合はすぐに続きそうです(すべてのフィルターがdrushの--skip-modulesフィルターに触発された後)。

エクスポートを異なるディレクトリに分割して、git ignoreすることができます。

drupal con dublin 2016には、CMIイニシアチブを担当する人々による非常に素晴らしいプレゼンテーションがありました。


2

#1の回答で@berdirをテストしたところ、完全に実行されました。ちょっとだけ注意してください:この変数に設定全体を入れて、完了しなければなりません。それ以外では、$ config変数は正しく実行されません。

このようなもの:

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

ドキュメント:https : //www.drupal.org/node/1928898

上記のドキュメントからの注意:「settings.php内の$ configを介してオーバーライドされた値は、Drupal管理インターフェイスから表示できません。」


3
これを行う必要はありません。定義した値にマージする必要がありますが、一部の構造では期待どおりに動作しない可能性があります。
ベルディール

ああ、正しく実行できませんでした。再度デバッグを試みますが、正しく実行されない場合は、d.orgのバグを開くことができます。ありがとう!
-estoyausente

1
私はあなたが何かを行うことができたことを確認することができます$config['module.settings']['some']['value'] = 'foo';
googletorp

2

なぜ今まで誰もDrush CMIツールに言及していないのか不思議に思う。魔法の言葉があるdrush cexyconfig-ignore.yml。調整可能なリストがあります。ブロックベースが処理されると同時にブロックインスタンスを除外するために一度必要でした。

すべての構成をエクスポートしたいが、特定のパターンを除外したい。

これが--ignore-listオプションのdrush cexy出番です。

このプロジェクトには./drushフォルダーがあります。そのため、次のようにconfig-ignore.ymlというファイルに内容を添付します。

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

だから今私たちは次のdrush cexyように実行します

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

そのため、アクティブな構成をエクスポートし、無視リストを適用して不要な構成を削除します。

したがって、実行git statusすると、コミットしたい変更のみが表示されるはずです。

ソース:https : //www.previousnext.com.au/blog/introducing-drush-cmi-tools

設置

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

ソース:https : //github.com/previousnext/drush_cmi_tools


1

config splitの使用(推奨)

構成分割モジュール、この必要性のために特別に作られました。

構成分割は、drushと統合されています。

Drushのみを使用する

それを使用してそれを行うこともできるはずです --skip-modulesフラグです。

プロジェクトのwebrootにあるdrupal / drushrc.phpに次の行を追加して、自動的に実行できます。

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

http://www.drush.org/en/master/config-exporting/#ignoring-development-modulesを参照してください

悲しいことにバグがある:この機能を持つhttps://github.com/drush-ops/drush/issues/1820が。とりあえず、これらの構成ファイルを.gitignoreに追加して、エクスポートされた構成ファイルがコミットされないようにする必要があります。おそらく、この(バグのある)機能を破棄して、構成の分割を支持する継続中です。


2
gitの設定ファイルを無視しても、正確に機能しません。エクスポートされていない構成は削除されます。たとえば、カスタムパネルページは、設定をインポートすると削除されます。
ドブジン

@ user157272 ['config-import'] ['skip-modules']でdrushを使用してインポートしても?
ガガリン

drushrc.phpはwebrootの外に配置することもできます。たとえば、1つの高いレベル、あなたが作曲セットアップでのDrupalで作業するときに便利です:github.com/drupal-composer/drupal-project
leymannx

これはうまくいきませんでした。モジュールを追加しましたが、まだモジュールの有効化/無効化設定に追加されていました。
ジェレミージョン

現在のベストプラクティス(構成の分割)で答えを更新しました
-gagarine
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.