跳转到主要内容
长风 提交于 31 August 2018

第一章前言 这篇文章主要针对有意向将Drupal6或者Drupal7的读者,在升级前,请务必作好备份。

下面插播一则新闻 :长风Drupal开发团队从2008年开始专注Drupal整体解决方案、Drupal主题开发、Drupal模块开发,积累了大量Drupal开发的成功案例,我们只创作精品,希望有幸能和您诚信合作。

网址:http://www.5188jxt.com

第二章 Drupal 6/7升级到Drupal8的准备 一、准备升级 在把你的Drupal6或者Drual7网站升级为Drupal8前,建议采取措施,以确保过程将顺利,并有希望的结果。不同于以往的Drupal核心版本的升级,Drupal8升级的过程不升级源站点。相反,一个新的Drupal实例从源站点拉取配置和内容。尽管升级不改变源站点,建议不要直接在线操作,使用一个在线站点的备份是一个不错的主意,防止任何影响在线在点的操作。

二、必要条件 1、一个全新的Drupal8安装的站点,并且启用Migrate Drupal模块

2、能够从新安装的Drupal8站点访问Drupal6或者Drual7的数据库

3、能够访问源站点的文件,如果只有public files被使用,可以通过源站点的域名访问,如果private files需要迁移,文件的目录需要从Drupal8站点直接被访问

4、Migrate Upgrade模块在Drupal8站点上被安装并开启。

5、如果你计划从drush升级,你需要安装drush8

6、如果你要从Drual7迁移private files,你必须在运行upgrade前,在setting.php配置drupal8的file_private_path 路径。

三、启用必须的模块 迁移过程不会在Drupal8的目标站点安装模块,只迁移在目标站点和源站点都安装了的模块相关的数据。因此,在运行迁移前,你需要在drupal8上启用你想从源站点迁移的数据相关的所有模块,比如,如果你在源站点安装有book模块,并且希望保持图书的层次结构,开始升级过程前,你必须在drupal上启用book模块,同时需要注意,Drupal6/7的模块不需要一对一地与Drupal8上的模块对应。比如,Drupal6和Drual7的block模块在Drupal8上是被分开成block和custom block模块。

四、不要配置Drupal8 注意升级的过程会覆盖drupal8上的配置,所以在升级过程完成前,不要在Drupal8上做任何配置。这意味着在运行升级前,你不需要创建内容类型和字段。括号内可能存在错误,感谢龙马兄指出。(Migrate module 将创建这些东西,这和Migrate在Drual7或者更早的版本上运行不同,在以前版本,运行迁移前,你不得不准备好所有的内容类型和字段。)

继续,你有两个选择运行迁移:

1)使用migrate upgreade interface,这是一个较早的方法,可以通过Drupal8上的用户界面完成操作,但是,它提供更少的控制机会。

2)使用drush,这个更稳定,更快速,允许选择性的迁移,但是需要一个额外的模块,它必须在命令行被执行。

第三章 通过WEB界面执行升级 一、通过WEB界面执行升级 一旦你看了Drupal6/7升级到Drupal8(一),使用web界面是一个可行的执行迁移的方法。

贡献的第三方Migrate Upgrade 模块(https://www.drupal.org/project/migrate_upgrade)是针对从drupal6/7升级到Drupal8提出的用户界面。它仍然在开发中,所以过程可能中断,如果有报错产生,首先查看https://www.drupal.org/project/issues/migrate_upgrade,这里可能已经修复了错误,如果没有,和开发者核对,https://www.drupal.org/irc。

安装模块后,访问你的Drupal8站点的/upgrade页面,你会看到一下页面。当你已经准备好进行升级,点击continue按钮,这将带你到下面显示的migrate upgrade页面。输入数据库的访问凭证以及drupal6或者Drual7的文件访问路径,点击review upgrade,如果你的drupal6或者Drual7站点使用数据库前缀,确保展开advanced options 并且填入前缀信息。

http://5188jxt.com/sites/all/libraries/ueditor/php/upload/20160213/1455370273290.png

 

如果数据库访问凭证正确,升级预览页面将基于源站点模块展示源和目标的匹配和不匹配项。

你不能在这个页面直接做任何动作来修复哪些显示missing的项。他们中的一些没有实现,需要进行开发,然而另一些表示模块在目标站点没有被安装。在这个例子中,book模块在源站点中被安装了,但是在目标站点中没有被安装,所以显示missing。

http://5188jxt.com/sites/all/libraries/ueditor/php/upload/20160213/14553702639947.png

可以迁移的部分被列出来,默认是收起的。

http://5188jxt.com/sites/all/libraries/ueditor/php/upload/20160213/14553702713995.png

这是执行真正升级之前的最后的页面,所以,这是点击取消的最后机会,一旦你点击perform upgrade 按钮,升级进程就正式开始了。根据目标站点的内容和配置的大小和类型,升级可能花费很长一段时间,做好让进程长时间运行的准备。

 

新的信息显示在页面的顶端,较老的信息将在页面的底端消失随着进程的继续,所有的信息都将被记录,并且可以稍后被查看。一旦进程结束,将带着总览的结果信息跳转到站点首页。

在日志页面可以查看被记录的信息。

http://5188jxt.com/sites/all/libraries/ueditor/php/upload/20160213/14553702677032.png

第四章 使用DRUSH执行升级 一、获取合适的Drush版本 确保你使用的是从composer或者Github获取的最新的drush。如果你使用Github版本,你仍然需要Composer下载相关的依赖。 Drupal.org/PECL/Pear/etc的Drush已经过期了。

对桌面端开发用户来说,你可以在桌面开发端通过发起一个命令提示符,运行下面的命令:[c:\your_path_to_acquia]\drush\composer global require drush/drush:dev-master 来使用composer更新drush。

检查Drush的版本drush --version

二、必要的Drupal模块 要使用Drush迁移,你需要下载并启用Migrate Upgrade模块,如果你计划做的不止一次性的升级,你需要下载migrate tools

三、简单的方法:使用 migrate-upgrade 迁移工具将添加 drush迁移的命令,比如drush migrate-staus(ms) 以及migrate-import(mi).如果你启用这个模块并运行drush migrate-status 而没有通过migte upgrade 模块做任何动作,你不会看到任何可用的迁移在运行。

这是因为独特的迁移被基于你设置的源数据动态地创建。只要Migrate 不知道使用的源,就不会有迁移被创建。

为了解决这个问题,我们使用migrate upgrade 模块,migrate upgrade 模块来自Drush命令 drush migrate-upgrade.这个模块做两件事情:

1)它将为你的网站生成迁移,基于你配置的源网站,比如,如果book 模块在你的Drupal6和Drupal8网站同时被启用,D6的book 迁移会被创建。

2)它通过依赖顺序,执行每一个创建的迁移。

尽管如此,为了更多的控制,你可能想通过--configure-only选项,这样,他只执行第一步的创建迁移。

drush migrate-upgrade --legacy-db-url=mysql://user:password@server/db --legacy-root=http://mydrupal6site.com --configure-only

加上configure-only 参数运行drush迁移Drupal后,你可以运行drush migrate-status 来列出可能执行的迁移。这时,你可以概览或者选择实行某些迁移。drush migrate-import {migrate name} 可以被用来分别执行他们,或者drush migrate-import --all 执行整个列表。

四、复杂的方法:使用 migrate-manifest 也可以通过一个manifest文件来设置一个特殊的迁移设置。这个让你可以以重复的方式运行成组的迁移。使用这种方法,你需要migrate manifest模块,当你有所有单元的设置,你可以通过运行drush config-list|grep migrate 得到全部可用的迁移。

这时,你需要创建一个可用的yaml文件,它看起来像下面的代码例子。你只需列出你需要的部分,你需要添加迁移来解决所有依赖,迁移能够被列出来,迁移将基于依赖为他们排序。

# user - d6_user - d6_user_profile_field - d6_user_profile_field_instance - d6_user_profile_entity_display - d6_user_profile_entity_form_display - d6_profile_values:user - d6_filter_format - d6_user_role - d6_user_picture_entity_display - d6_user_picture_entity_form_display - d6_user_picture_file - d6_user_picture_field - d6_user_picture_field_instance # taxonomy - d6_taxonomy_vocabulary - d6_taxonomy_settings - d6_taxonomy_term # nodes - d6_node - d6_node_revision - d6_node_type - d6_view_modes - d6_filter_format - d6_field_instance_per_form_display - d6_field_instance_widget_settings - d6_field_formatter_settings - d6_field_instance - d6_field - d6_field_settings - d6_node_settings - d6_cck_field_values:* - d6_cck_field_revision:* # taxonomy fields - d6_term_node_revision - d6_term_node - d6_vocabulary_entity_display - d6_vocabulary_entity_form_display - d6_vocabulary_field_instance - d6_vocabulary_field # blocks - d6_block - d6_menu # custom blocks - d6_custom_block - d6_filter_format # book - d6_book - d6_book_settings # file migrations are configurable, see https://www.drupal.org/node/2257723 - d6_file:   source:   conf_path: sites/assets   destination:   source_base_path: destination/base/path   destination_path_property: uri