Drupal 7 到 8 迁移 - 解决迁移挑战的操作指南(带建议)
已发表: 2020-02-27您是否考虑过 Drupal 7 到 8 的迁移? 你还在用 Drupal 7(或 6)运行你的网站吗? 是时候迁移到 Drupal 8 了!
如果您仍在使用 Drupal 7(或 6),我们已经写了大量关于为什么应该迁移到 Drupal 8 的文章。 尽管如此,我们迁移到 Drupal 8 的最喜欢(也是重要的)原因之一是…… Drupal 9 即将到来! 如果您想享受 Drupal 9 的好处,建议您先将 Drupal 7 迁移到 Drupal 8。 我们可以争辩说,您现在应该转向 Drupal 8,因为一旦 Drupal 9 在这里(2020 年 6 月)和 Drupal 7 的 EOL(2021 年 11 月),没有足够的时间。 但是您可以声称您可以选择 LTS(长期支持)来代替! 很公平。 除了花费更多的钱聘请 LTS 服务提供商之外,您还失去了 Drupal 8 必须提供的丰富好处。 有些事情可能看起来很困难,但对于更强大和更简单的未来来说却是必要的。
一旦在 Drupal 8 上,您就不必再“迁移”——只需从 Drupal 8.9 到 9,然后从 9.9 到 10 等等的简单“升级”就可以了。 Drupal 7 到 Drupal 8 的迁移并不总是容易和直接的; 我同意。 遵循流程会有所帮助,但在迁移过程中您可能仍会面临一些挑战,尤其是当您的 Drupal 7 网站的内容模型相当复杂时。 让我们带您逐步从 Drupal 7 迁移到 Drupal 8,了解您可能面临的挑战。 以及我们关于如何克服它们的建议。
Drupal 8 Migrate – 假设和准备
“做好准备是成功的一半”,西班牙小说家米格尔·德·塞万提斯说。 Drupal 8 迁移可能会变得复杂,但如果您在计划迁移上花费了足够多的时间,那么挑战不会让您感到惊讶。 Drupal 8 采用了许多现代开发标准,如 Symfony、Twig、PHP 7 等,这导致了这次完全重建,但它也需要更强大、健壮和灵活的数字体验。 列出了一些在开始 Drupal 7 到 8 迁移之前应该记住的先决条件——
- 将您的 Drupal 7 网站更新到可用的最新版本。 这将有助于更清晰地自动升级某些具有直接 Drupal 8 升级路径的模块。
- 确保您可以访问 Drupal 7 网站的数据库和文件(公共和私有)。
- 创建 Drupal 7 网站的备份并将此备份用于 Drupal 8 迁移。 虽然迁移本身不会对源进行任何修改,但不建议迁移实时功能网站。
- 从这里下载 Drupal 8 的全新安装,并启用我们上面讨论的核心 Migrate 模块。 请记住,它必须是新鲜的! 执行 Drupal 8 升级时,所做的任何配置或创建的内容都将被覆盖。
- 从 Drupal 7 到 Drupal 8 没有直接的升级路径(与之前的版本升级不同)。 熟悉 Drupal 8 的迁移系统。 核心的三个模块——Drupal 8 Migrate 模块、 Drupal 8 Migrate Drupal模块和Drupal 8 Migrate Drupal UI模块。
- 做出您的迁移选择——您是使用 Drush(它为您提供精细控制)还是使用浏览器用户界面(更容易但控制更少)?
- 知道你的来源。 Drupal 内容迁移系统的灵活性允许从旧版本的 Drupal 和各种其他来源(如 CSV、XML、JSON、MYSQL 等)中提取和加载内容。
- 为了顺利迁移 Drupal 内容,请执行彻底的内容审核以确定您需要迁移的内容。 丢弃未使用和不相关的内容,以避免花费时间和精力迁移它们。
Drupal 7 到 8 迁移过程(循序渐进)
观察和计划
顺利的 Drupal 内容迁移要求您首先确定现有站点的内容类型和内容结构,并记录观察结果。 这包括内容类型、字段类型、块、分类法等。根据这些观察准备关于您需要迁移的内容和需要合并的内容的计划。 分析视图和其他站点配置并将它们编目,以便在 Drupal 8 中更容易复制它们。
创建 Drupal 7 网站的模块清单
使用此清单,您应该能够确定您仍然需要的模块,或者该模块是否有 Drupal 8 版本,或者该模块现在是否已移至 Drupal 8 Core(如媒体模块)。 并非所有 Drupal 7 模块都可以自动迁移到 Drupal 8。某些 Drupal 7 模块可能已将它们的功能合并到单个 Drupal 8 模块中。 并且某些 Drupal 7 模块可能将它们的功能分成两个或多个 Drupal 8 模块。 最好分析此类情况以确保没有数据丢失!
专家建议– 使用像 Drupal Migrate UI 这样的模块来识别 Drupal 7 模块及其对应的 Drupal 8 模块(如果可用或不可用)。
专业提示- 没有适用于 Drupal 8 的模块版本? 例如,Drupal 7 中的 ImageField 模块没有对应的 D8 模块。 我们可能需要在 Drupal 8 中找到最合适的替代方案。当然,我们有 Drupal 8 核心媒体模块。 但是,我们将不得不开发自定义脚本来迁移图像数据。 迁移图像数据。
专家推荐——如果您刚刚继承了一个 D7 网站并且不知道对模块进行的自定义或者如果您自己进行了自定义并需要找到它们,我们建议您使用 Hacked! 模块。 该模块将查看站点上可用模块的列表以及对每个模块所做的更改/自定义。

复制和构建
复制 D8 实例中所需的内容类型、分类法和所有实体。 创建和复制内容后,必须手动构建视图。
专家建议——
- Drupal 7 中的模板文件 (.tpl) 应该使用 twig 文件重写,它是 Symphony 2 框架的一部分。
- 确保按照 Symphony 标准重写自定义模块。
实施 Drupal 7 到 8 迁移
最期待和最重要的一步已经到来。 如前所述,有两种方法可以将 Drupal 7 数据迁移到 Drupal 8 -
- 使用 Drupal UI 运行迁移
- 使用 Drush 运行迁移
推荐后者,因为它效率更高,可以合并到 shell 脚本中,并且错误信息更清晰。
Drupal UI 方法
利用 Migrate UI Drupal 8 模块,您可以从访问 Drupal 8 网站的/upgrade路径开始。 Drupal 8 升级审查页面将向您显示 Drupal 7 站点中可以和不能自动迁移到 Drupal 8 的模块列表。对于在另一个 D8 模块中具有其功能但不完全相同的模块(如D7 现在是 D8 中的地址模块),您需要安装并启用相应的 D8 模块并重新启动 Drupal 7 到 8 迁移过程。 根据内容目录和提取的数据,您需要构建迁移脚本,在其中将 Drupal 7 的内容类型属性映射到 Drupal 8 的新构建的内容类型属性。接下来,您可以继续从数据源。
冲刷法
你习惯使用终端吗? 如果是这样,您应该为 Drupal 7 到 8 迁移选择 Drush 方法。 它为数据迁移过程提供了一组命令,具有更好的状态消息。 如果您正在寻找使用 Drush 命令的分步过程迁移,请查看本教程。 以前从未使用过 Drush? 本指南将通过一系列有用的迁移命令帮助您了解 Drush 的基础知识。
你现在可能会遇到一些冲突。 确保您已检查 Drupal 中的已知问题。 org 以及如何修复它们。 修复后,您现在可以运行迁移过程,为所采取的操作提供连续的日志/反馈。 最后,检查日志是否有任何错误,修复它们,你就可以开始了!
专家建议——等等! 创建内容后,永远不要忽视 SEO/页面浏览量。 我们需要内容具有相同的 URL 路径。 不要忘记从旧的 Drupal 7 站点迁移 URL 别名、内容的元标记信息。
测试
在从 Drupal 7 迁移到 Drupal 8 期间,您很少会遇到零问题。 迁移完成后,绝对有必要对新导入的配置和内容进行回归测试,以确定任何潜在的错误或问题。
挑战和(更专业的)建议
- 许多 Drupal 7 贡献的模块在 Drupal 8 中有更好的版本,有些已被弃用。 例如,用于在 Drupal 7 中对字段进行分组的字段收集模块即将被弃用。 该模块的功能已添加到 Drupal 8 中的段落模块和实体参考修订模块中。Drupal 8 段落模块为内容编辑/作者提供了极大的灵活性,以创建无缝的表单和结构。 如果您需要迁移 Field Collection 模块并将其映射到 Paragraphs 模块 (D8),您将需要编写自定义插件将 Field Collection 字段之间的内容映射到 Paragraph 字段。 或者,如果您仍然希望在 Drupal 8 中继续迁移 Field Collection 模块,则可以通过可用的 Core 迁移插件来处理此字段映射。
- 您是否使用面板来创建您的登录页面,例如主页、仪表板等? 即使你只需要在主页中放置一个块? 布局生成器来救援! Drupal 8 中的布局生成器使内容编辑器可以更轻松地自定义登录页面。 让我们充分利用 Drupal 8 的功能。要从面板迁移到布局构建器,您需要编写一些自定义迁移插件。
- 在迁移用户时,我们还必须维护密码,以便用户不必在新站点上重新创建密码。 密码是散列内容。 因此,您必须找到源站点中使用的哈希类型算法。 下一个。 编写一个过程,使用相同的算法使用重新散列的密码验证迁移的密码。
- 运行 Drupal 7 到 8 迁移时,您可能会耗尽系统资源,这可能会导致迁移停止。 多亏了高水位标记,您可以再次运行迁移,它应该从停止的地方开始。
- 在配置管理接管 Drupal 8 中的所有功能和更多功能后,Drupal 7 中广泛使用的功能模块现在几乎已经过时了。虽然功能模块在 Drupal 8 中也可用,但强烈建议利用 Drupal 8 的配置管理系统。 它不仅使用起来更简单,而且易于在环境之间导出,它使用 YAML 文件格式而不是 PHP——这是一种更具可读性和正确的数据格式。
- 如果您有一个多语言 Drupal 7(或 6)网站,您可以利用迁移 Drupal 多语言模块。 尽管 Migrate Drupal 多语言模块仍处于试验阶段,但它是所有多语言 Drupal 站点的必备模块。
- 面对 Drupal 7 到 Drupal 8 迁移的问题? 有几种方法可以报告失败并获得帮助 -
- Drupal 8 升级问题队列
- 如果您发现核心/贡献模块的错误或异常,则模块问题队列
- Freenode 上的 #drupal-migrate IRC 频道
- Drupal Slack 上的#migration 频道
- 聘请 Drupal 专家

