从导入/导出中排除配置


16

我以为这是新的配置管理系统的简单用例,但是我没有运气找到解决方法:

问题

我想将配置存储在git中,并在开发过程中使用drush导出配置,然后在部署时导入配置。与在Drupal 7中还原功能非常相似。我的问题是,我不想在git中存储用于各种集成的访问代码。这导致这些配置在上被删除
$ drush cim -y

我看过的地方

我希望将有一个简单的配置列表/配置,在导入/导出时应排除在外。似乎有些时候,但是必须将其再次删除,因为它在当前的Drupal 8版本中可用。

我研究了如何对活动和同步存储进行比较来进行配置更改,以查看是否存在可以删除更改的地方,但事实并非如此。我查看了配置导入是如何进行的,因为它有一些配置排除了它本身,但是看起来好像不是可扩展的。我查看了ConfigEvents,但是这些似乎都是在导入后发生的,因此看起来无法使用。

我是否缺少某些东西,还是无法简单地从导入/导出中排除配置?

Answers:


7

不可能专门排除,但是有一些东西。

就像Drupal 7中的$ conf一样,settings.php中有$ config,您可以用来覆盖本地配置中的任何内容。格式为$config['name.of.config']['nested']['key']

请注意,配置中存储的任何内容仍然保存在git中,因此您要么不保存任何内容,要么将测试访问代码保存在git中。而且,UI将显示config中实际存储的内容,并且当前不会提供任何被覆盖的指示。有待解决的问题可以改善这一点。

我知道这是有局限性的,但目前无法将某些内容排除在导出的配置之外。我所知道的。


因此,基本上,您必须在settings.php文件中设置/更新配置,而不是使用界面。
googletorp

是的,这不是什么新鲜事。在d8中,此上下文中的工作流没有任何改变。

11

您可以使用“配置忽略”模块:https : //www.drupal.org/project/config_ignore

有没有遇到过在执行急停CIM时您的站点配置被文件系统上的配置覆盖的问题?

不再!

该模块是一个工具,可让您将所需的配置保持在适当的位置。


2
config_ignore可能是当前可用的最稳定,最简单的解决方案,该解决方案可能最能满足OP的要求,即“在导入/导出时不包含配置的简单列表/配置”
bdanin

7

您可以为此使用config_ignoreconfig_split的组合。

通过配置忽略,您可以在导入期间忽略配置实体的子集(从2.x版本开始,还可以防止删除)。不幸的是,这并不能防止在导出过程中排除配置。

要在导出期间排除配置实体,可以使用config_split,创建一个新的config_split实体,并将该文件夹保留为空。这样可以防止将配置导出到文件系统。而是将其导出到数据库中。

在Drupal 8中针对此主题编写了“ 从配置管理中排除配置”


5

为了拆分配置,您可以使用https://www.drupal.org/project/config_split

输入config_split,它提供了Drupal控制台命令来导入和导出过滤的配置。Drush集成很可能会很快进行(毕竟所有过滤器都是受drush的--skip-modules过滤器启发的)。

您可以将导出分成不同的目录,然后可以忽略它们。

CMI倡议负责人在drupal con dublin 2016上做了一个非常不错的演讲,我敦促您无论如何都要检查一下。


2

我只是在#1答案中测试了@berdir,它运行完美。仅我加一点说明:您必须将整个配置放在此var中,完整。如果没有,$ 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

从上述文档中注意:“请注意,在Drupal管理界面中将看不到settings.php中通过$ config覆盖的值。”


3
您不必这样做。它应该合并到您定义的任何值中,但是对于某些结构而言,它可能无法正常工作。
Berdir '16

哦,我无法正确运行它。我将尝试再次调试它,如果运行不正确,也许可以在d.org中打开错误。谢谢!
estoyausente '16

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

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中的配置文件无法正常工作。未导出的配置将被删除。例如,自定义面板页面将在导入配置时删除。
dobrzyns

@ user157272,即使您使用带有['config-import'] ['skip-modules']的drush进行导入?
gagarine

drushrc.php甚至可以放在webroot之外。例如,更高一级,当您在作曲家设置中使用Drupal时非常有用:github.com/drupal-composer/drupal-project
leymannx '16

这对我不起作用。我添加了模块,但仍将它们添加到启用/禁用模块配置中。
杰里米·约翰

我使用当前的最佳做法(配置拆分)更新了答案
gagarine
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.