新しいDrupal 8構成マネージャーを使用して、特定の環境にDevelモジュールがインストールされないようにするにはどうすればよいですか?私の知る限り、ローカルにインストールすることは、次回構成をエクスポートするときを意味しますそれを他の環境(dev、test、prod)に移動すると、自動的に有効になります。
メソッド:Drush
Drushは、構成を同期するときに拡張機能の有効な状態を無視できます。
drush cex --skip-modules=devel
drush cim --skip-modules=devel
Drush CMIツール を使用すると、無視する構成のリストを操作できます。
drush cexy --ignore-list=/path/to/config-ignore.yml
drush cimy --delete-list=/path/to/config-ignore.yml
メソッド:モジュール
次のことを可能にする Configuration Split モジュールを使用できます。
構成読み取り専用モード モジュール
このモジュールを使用すると、Drupal管理UIを介して行われた構成変更をロックできます。これは、たとえば構成変更を本番環境では行わず、ステージングまたはローカルでのみ行う必要があるシナリオで役立ちます。環境。
$settings['config_readonly'] = TRUE;
また、別のモジュールは Environment Config で、環境ごとに構成をオーバーライドできます。
更新:以下で説明する機能は最近削除されました https://www.drupal.org/project/config_split/issues/2926505 =
展開プロセスでdrushを使用している場合は、次のことができます。
drushrc.php
と同じディレクトリにsettings.php
ファイルを作成し(例:docroot/sites/default
)、次のように記述します。
$drush_ignore_modules = array(
'devel',
'webprofiler',
'devel_generate',
'kint',
'yaml_editor',
);
$command_specific['config-export']['skip-modules'] = $drush_ignore_modules;
$command_specific['config-import']['skip-modules'] = $drush_ignore_modules;
つまり、drush cex
/drush cim
コマンドを操作して、モジュールの処理中にモジュールをスキップできます。
Drush 8での設定モジュールフィルターの使用 の詳細を読むことができます。
drush cex --skip-modules
は、これで説明されているようにconfig_splitに置き換えられて削除されました issue したがって、drushに基づいたここでのソリューションは私にとってうまくいきませんでした。
config_exclude モジュールを使用したDuncanmooソリューションに基づくソリューションは次のとおりです
$ composer require --dev drupal/config_exclude
$ drush en config_exclude -y
$ nano sites/default/setting.php
ローカルの開発環境でsettings.phpを使用できるようにします
if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
include $app_root . '/' . $site_path . '/settings.local.php';
}
ローカルファイルにconfig_exclude設定を追加する
$ nano sites/default/setting.local.php
ここにいくつかのサンプル設定があります
$settings['config_exclude_modules'] = [
'devel',
'config_exclude',
'config_filter',
...
'stage_file_proxy',
];
注1:config_filterはconfig_excludeの依存関係であるため、本番環境が必要ない場合は、上記で除外できます
注2:settings.local.php
は必須ではありません。 VCSによって制御されているかどうかによって異なります。
純粋に開発用のモジュールを有効にする場合は、-devフラグを使用します。
$ composer require --dev drupal/devel
これにより、それらの依存関係がrequire-devの下のcomposer.jsonファイルに追加されます。
...
"require-dev": {
"drupal/twig_xdebug": "^1.0",
"drupal/devel": "^1.0@RC"
}
}
したがって、使用する開発モジュールなしでサイトをインストールする場合:
$ composer install --no-dev
注:ステージング環境と製品環境では、常に--no-devを実行する必要があります
$ drush cex
除外されたモジュール設定をエクスポートしません
注:core.extension設定が変更されているようです上記のコマンドを実行した後、対応する.ymlがハードドライブに書き込まれないため(will be deleted and replaced with the active config
を確認した後も)、コミットするものは何もないので、config_excludeモジュール
composerでコミットされた開発モジュールで終了し、これらのモジュールの構成が構成エクスポートに追加されない(2つの部分がある))、これを行うためのきちんとした方法があります。
1。 Composer require --dev開発専用のモジュールを有効にする場合は、-devフラグを使用します。
$ composer require --dev drupal/devel
これにより、それらの依存関係がrequire-devの下のcomposer.jsonファイルに追加されます。
...
"require-dev": {
"drupal/twig_xdebug": "^1.0",
"drupal/devel": "^1.0@RC"
}
}
したがって、開発モジュールなしでサイトをインストールすると、次のようになります。
$ composer install --no-dev
NB:ステージング環境と製品環境では、常に--no-devを実行する必要があります
2。 config_split moduleを使用します
構成分割モジュールを使用すると、環境で有効または無効にできる構成エクスポートのグループを作成できます。
私は実際には3つの分割があります:
構成の分割 は、一部の人にとって実行可能なソリューションである可能性があります。
Drupal 8構成管理は、サイト構成のセット全体をインポートおよびエクスポートするときに最適に機能します。ただし、開発者は、CMの堅牢性を無効にして、構成のスーパーセットをアクティブにしたい場合があります開発マシン上でサブセットのみをデプロイします。これの標準的な例は、開発モジュールを有効にするか、開発環境でいくつかのブロック配置またはビューを用意し、デプロイする構成のセットにエクスポートしないで、同僚と開発構成を共有できる。
Drupal 8.3.xには興味深い問題があります:8.3.x: config-exportからオプトアウトすることを開発モジュールに許可する 。一般的なコンセンサスは Configuration Split です。 =現在のところ最良の解決策です。
swentel によるコメント:
Config_splitがどのように機能するかを簡単に文書化したかっただけです。configsplit configエンティティは、ブラックリストに登録するものを定義し、モジュールや構成オブジェクトをブラックリストに登録できるようにします。正規の例であるdevelには、すでに興味深いユースケースがあります。これはsystem.menu.develに付属しており、develをブラックリストに登録した場合、依存関係がないためメニュー構成ファイルは削除されません。大きな問題ではありませんが、config splitを使用すると、個別に選択できるため、環境から削除されます。
geerlingguy によるコメント:
環境固有の構成を管理するいくつかの異なる方法を試してみましたが、config_splitは、これまでのところ、最適なユーザビリティと追加のオーバーヘッドのバランスのバランスが最も優れているようです。シンプルで軽量ですが、特定の環境でのみ特定の構成をマーク(および使用し続ける)できます。
これにはデプロイメントオーバーライドモジュールを使用できます。詳細については、次のリンクを参照してください。
http://dcycleproject.org/blog/46/continuous-deployment-drupal-style
ただし、これを行う最善の方法は、ローカルでモジュールを無効にしてから構成をエクスポートすることです。
Drupalはsettings.php
の構成設定をオーバーライドする方法を提供しますが、モジュールの無効化/有効化には無効です。
default.settings.php
から:
/**
* Configuration overrides.
* * To globally override specific configuration values for this site,
* set them here.
*
*
* blah..blah...blah
*
*
* There are particular configuration values that are risky to override. For
* example, overriding the list of installed modules in 'core.extension' is not
* supported as module install or uninstall has not occurred. Other examples
* include field storage configuration, because it has effects on database
* structure, and 'core.menu.static_menu_link_overrides' since this is cached in
* a way that is not config override aware. Also, note that changing
* configuration values in settings.php will not fire any of the configuration
* change events.
*/
私はそれをすべて一度に行うための小さなスクリプトを作りました。
#!/bin/bash
drush pm-uninstall devel -y
drush pm-uninstall field_ui -y
drush pm-uninstall field_name_prefix_remove -y
drush config-export
drush en devel -y
drush en field_ui -y
drush en field_name_prefix_remove -y
Config Ignore モジュールも確認できます。
このモジュールは、必要な構成を適切な場所に維持するためのツールです。
System.site構成(そのサイト名、スローガン、電子メールなどが含まれる)を、構成に関係なく、エクスポートフォルダー内のライブサイトで変更せずにそのままにしたいとします。
または、構成をインポートするたびにdevel.settingsを変更することに飽き飽きしているのではないでしょうか?
Drupal 8.8で導入されました。そのための設定があります: 新しいconfig_exclude_modules設定はどのように正確に機能しますか?
Develモジュールであなたを除外するには
$settings['config_exclude_modules'] = ['devel'];
をsettings.phpに、またはさらに良いことに、settings.local.phpに。