web-dev-qa-db-ja.com

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

これは新しい構成管理システムの簡単な使用例だと思いましたが、これを解決する方法を見つけることができませんでした。

問題

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

私が見たところ

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

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

何かが足りないのでしょうか、それとも単純に構成をインポート/エクスポートから除外できないのでしょうか?

17
googletorp

具体的にexcludesを指定することはできませんが、何かあります。

Drupal 7の$ confと同じように、settings.phpに$ configがあり、ローカルで構成のすべてを上書きするために使用できます。形式は$config['name.of.config']['nested']['key']

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

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

8
Berdir

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

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

もう違います!

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

12
Weri

config_ignoreconfig_split を組み合わせて使用​​できます。

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

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

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

9
Geert van Dort

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

Drupalコンソールコマンドを提供するconfig_splitを入力します。Drushの--skip-modulesフィルターによってすべてのフィルターが影響を受けた後、Drushの統合がすぐに続くでしょう。).

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

CMIイニシアチブの担当者による非常に素晴らしい drupal con dublin 2016 でのプレゼンテーションがありましたが、何があってもチェックすることをお勧めします。

6
Potney Switters

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

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

これが--ignore-listdrush 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

3
leymannx

config splitを使用する(推奨)

config split module は、特にこのニーズのために作成されました。

Config SplitはDrushと統合されています。

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/182 =。したがって、現時点では、これらの構成ファイルを.gitignoreに追加して、エクスポートされた構成ファイルがコミットされないようにする必要もあります。彼らはおそらくこの(バグの多い)機能をDrushから放棄し、構成分割を支持するために進行中です。

2
gagarine

Drupal 8.8以降は、settings.phpファイルに$settings['config_exclude_modules']を追加することで、8.8モジュールを構成の同期から除外できるようになりました。

$settings['config_exclude_modules'] = ['devel', 'stage_file_proxy'];

変更レコードを参照 モジュールは構成の同期から除外できます

2
albertski

@berdirを#1の回答でテストしたところ、完全に実行されました。私だけが少しメモを追加します。構成全体をこの変数に完全に入力する必要があります。それがないと、$ config varが正しく実行されません。

このようなもの:

 $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管理インターフェイスからは表示できません。」

2
estoyausente