如何在其他站点上导入配置?


49

当我尝试导入另一个站点的配置时出现此错误:

无法导入暂存的配置,因为它源自与该站点不同的站点。您只能在此站点的克隆实例之间同步配置。

我有10个客户,我需要将我的站点配置与10个不同的网站同步。
网站UUID是与其他网站共享配置的问题。有解决方案吗?


Answers:


55

您可以通过以下方式获取UUID:

drush config-get "system.site" uuid

你可以用

drush config-set "system.site" uuid "fjfj34-e3bb-2ab8-4d21-9100-b5etgetgd99d5"

这样,您就可以拥有相同的网站。


为我工作...三年后。谢谢!
mrlexington

17

配置管理仅允许在同一站点或项目之间进行同步配置,以避免在将配置从站点a.com导入到b.com时出现问题,从而完成此验证Drupal 8 为每个站点生成一个UUID

您可以通过执行以下命令来获取当前站点的UUID:

drush cget system.site

上面的命令将具有与下一个清单类似的输出:

uuid: 236fa77c-d83e-42de-8a03-03c574c00160
name: Drupal 8
mail: user@example.com
slogan: ''
page:
  403: ''
  404: ''
  front: node
admin_compact_mode: false
weight_select_max: 100
langcode: en

config导入具有不同的UUID,您可以使用以下命令确认UUID

cat sites/default/config/staging/system.site.yml

因此,您需要使用以下Drush命令更改Site UUID的值:

drush cedit system.site

上面的命令使您可以使用喜爱的文本编辑器来设置登台配置文件中存在的相同UUID。

cat sites/default/config/staging/system.site.yml

更改UUID并更改权限后,如果再次访问example.com/admin/config/development/configuration页面,您将看到所有更改,删除,重命名和添加。

来源:http//enzolutions.com/articles/2014/08/27/understanding-configuration-management-in-drupal-8/


9
正确,但是请记住,更改站点UUID而不更改任何其他内容意味着drupal将把具有不同UUID的每个字段/节点类型/视图/ ...视为不同,然后首先删除旧的,然后重新再次创建它,这实际上将删除您的所有内容。
贝尔迪尔

好的,谢谢,但是对于没有专门的服务器和linux知识的用户来说,它不是用户友好的,请为基本/初学者用户提供解决方案(没有ssh和命令行,只有ftp服务器)?Drush需要命令行,这对我的客户而言并不友好。
Axel Briche

如果我更改现有Drupal网站的站点UUID(全新安装)以匹配导出的配置(带有drush config-set system.site uuid "abcdef-..."),会发生什么情况?
GiDo 2015年

1
用于复制更新站点UUID的单行命令。drush -y cset system.site uuid $(cat /path/to/config/system.site.yml | awk '/uuid/ { print $2 }')
ya.teck

10

使用Drupal控制台

您可以通过覆盖- 键来使用Drupal Console实现相同的目的。system.siteuuid

$ drupal config:override

然后在出现提示时输入配置名称system.site,配置密钥uuid和适当的值。

Enter configuration name [advagg.settings]:
> system.site

Enter the configuration key [uuid]:
> uuid

Enter the configuration value:
> 656165f1-1017-45a1-9bd8-f70e31cf29ab

Configuration name system.site
------------------- -------------------------------------- -------------------------------------- 
Configuration key   Original Value                         Override Value                        
------------------- -------------------------------------- -------------------------------------- 
uuid                7622bb19-5f3f-452d-82a3-c0a88241e789   656165f1-1017-45a1-9bd8-f70e31cf29ab  
------------------- -------------------------------------- -------------------------------------- 

1
我认为这应该是公认的答案。
Badri

7

您可以获取站点UUID,而无需访问站点或数据库。

如果您无权访问原始站点/数据库,则仍可以从提供的配置文件中进行同步。该配置将包含您站点的UUID,因此您需要先进行设置。

  1. 查找您的config / sync目录:如果已移动,则可以在中找到它的设置位置settings.php。查找: $config_directories['sync'],它将列出路径。

  2. 转到该配置路径,然后查找文件:system.site.yml 在该文件中查找uuid: 86b376c5-385e-4d13-bf00-e5e5443540e3(显然会有一个不同的值)。复制该值。

  3. 在drush中,将您的网站设置为我们刚刚发现的同一网站uuid: drush cset system.site uuid 86b376c5-385e-4d13-bf00-e5e5443540e3

  4. 使用drush同步配置 drush cim -y

  5. 如果发现错误,请阅读。我有:

    • 缺少的模块(我必须下载并启用)
    • 快捷方式模块中的内容,我必须首先将其删除:
    • 管理员>配置>用户界面>快捷方式

一旦这样做,我就重新启动了cim,一切都变得像个魅力!

在尝试从提供的配置中还原之前,我已经安装了本地D8实例。


4

您可以使用drush cset和drush cget更改目标站点的UUID。

首先获取源UUID:

$ cd ~/Sites/sourcesite <-- your drupal site root
$ drush cget system.site uuid
This will return something like:
'system.site:uuid': 86b376c5-385e-4d13-bf00-e5e5443540e3 

替换目标UUID

cd ~/Sites/destinationsite <-- your drupal site root
$ drush cset system.site uuid 86b376c5-385e-4d13-bf00-e5e5443540e3 

现在你可以:

  1. 在浏览器中的admin / config / development / configuration / full / import上导航到目标站点
  2. 选择配置存档,然后选择上载
  3. 您将看到所有配置项的列表
  4. 向下滚动到底部,然后单击全部导入按钮

0

如果您按照Gucho Ca的答案进行操作,但仍然有问题,请确保检查您在sync config目录中是否具有写权限。即使您的uuid相同,它也会给您同样的错误消息,但是您的系统没有写权限。

检查的一种好方法是单击“同步”部分的“导入”选项卡。如果您没有正确的文件权限,它将告诉您。

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.