使用新的Drupal 8配置管理器,如何防止它在某些环境中安装Devel模块?据我所知,在本地上安装它意味着下次我导出配置并将其移到其他环境(开发,测试,生产)时,它将自动启用。
使用新的Drupal 8配置管理器,如何防止它在某些环境中安装Devel模块?据我所知,在本地上安装它意味着下次我导出配置并将其移到其他环境(开发,测试,生产)时,它将自动启用。
Answers:
方法:冲
同步配置时,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
方法:模块
您可以使用配置拆分模块,该模块允许您:
配置只读模式模块
该模块允许锁定通过Drupal管理UI完成的任何配置更改。例如,在不应在生产环境上进行配置更改,而只能在暂存或本地环境上进行配置更改的情况下,这很有用。
$settings['config_readonly'] = TRUE;
另一个模块是Environment Config,它允许您基于每个环境覆盖配置。
composer require --dev drupal/devel
。额外的好处是Composer安装速度更快,从而使产品部署速度更快。
更新:最近删除了以下描述的功能 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,因此基于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模块的内部
Drupal 8.3.x有一个有趣的问题:允许开发模块选择退出config-export。普遍的共识是配置拆分是当前最好的解决方案。
评论来自swentel:
只是想简要地记录一下config_split的工作原理:config split split配置实体定义了被列入黑名单的内容,允许您将模块和/或配置对象黑名单。典型的例子是devel,已经有一个有趣的用例:system.menu.devel附带了它,如果您将devel列入黑名单,则由于没有依赖性,因此不会删除菜单配置文件。尽管这不是主要问题,但配置拆分还允许您单独选择该选项,因此可以在环境中将其删除。
评论来自geerlingguy:
我尝试了几种不同的方法来管理特定于环境的配置,并且config_split似乎达到了正确的可用性,而到目前为止,额外的开销平衡是最好的。它既简单又轻巧,但仅允许我在某些环境中标记(并继续使用)某些配置。
对于某些人来说,配置拆分可能是可行的解决方案。
当导入和导出整个站点配置集时,Drupal 8配置管理最有效。但是,有时开发人员喜欢退出CM的健壮性,并在其开发计算机上启用活动的超集配置,并仅部署一个子集。一个典型的例子是在开发环境中启用devel模块或在开发环境中具有一些块放置或视图,然后不将它们导出到要部署的配置集中,而仍然能够与同事共享开发配置。
有一种整齐的方法,为方便起见,最终将自己的dev模块提交到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
注意:在舞台和产品环境中,应始终执行--no-dev
2.使用config_split模块
配置拆分模块使您可以创建可在环境中启用或禁用的配置导出分组。
我实际上有3个分割:
您可以为此使用部署覆盖模块。阅读以下链接以获取详细说明:
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.
*/
drush
接受?我前一天发现了drush config-export --skip-modules=devel
。不使用草稿可能会有类似的事情,但我不知道。