作者:成都长风云Drupal开发
官方的Drupal 11已经准备就绪了!基于Drupal 10升级到Drupal 11的难度远远低于Drupal7升级到Drupal8或者Drupal9。Drupal 10将继续支持到2026年中后期,现在着手升级到Drupal 11是一件很好的事,因为现在Drupal 10和Drupal 11都在支持,但最终会使用Drupal11,现在升级可以避免您以后不得不升级的尴尬和匆忙。
与从Drupal 9升级到Drupal 10类似,Drupal 10的最新版本Drupal 10.3.1定义了Drupal 11的所有弃用代码。与之前的现代Drupal主要版本升级一样,为了使您的应用程序尽可能干净地升级,有一组推荐的重点领域。
这些重要的考虑因素是:确保您的环境为Drupal 11做好准备,更新您的自定义模块代码,然后最终更新到Drupal核心本身的下一个主要版本。

以下是帮助网站管理员将Drupal网站从Drupal10升级到Drupal 11做好准备的注意事项。这些没有以特定的顺序。
一、平台要求
要在您的环境中运行Drupal 11,您需要检查下面列出的要求。
二、更新到PHP 8.3
Drupal 11需要启用zlib扩展的PHP 8.3。默认情况下,大多数系统已经启用了此扩展。在您计划进行初始升级的开发或沙盒环境中,您应该启用PHP 8.3。这是一件好事,因为PHP 8.3比早期版本的PHP快得多。

三、Drush 13的更新
如果你使用Drush,请确保更新到Drush 13。在您计划进行初始升级的开发或沙盒环境中,您应该有Drush 13可用。
根据需要,您可以使用:composer require drush/drush^13
四、数据库
Drupal 11支持的数据库驱动程序的要求如下:
MySQL数据库驱动程序需要MySQL 8.0。Drupal 11还没有直接使用MySQL 8特定的语法,但在未来的版本中会使用。如果你还不能升级到MySQL 8.0,可以暂时使用MySQL 5.7 backport模块。
MariaDB数据库驱动程序需要MariaDB 10.6。Drupal 11还没有直接使用MariaDB 10.5特定的语法,但在未来的版本中会使用。如果你还不能升级到MariaDB 10.6,你可以暂时使用MariaDB 10.3后端口模块。
PostgreSQL数据库驱动程序需要PostgreSQL 16。
SQLite数据库驱动程序需要具有json1扩展名的SQLite 3.45。
五、Web服务器
Apache是Drupal最常用的web服务器。Drupal需要Apache 2.4.7或更高版本。Drupal 11不提供web.config文件。删除了对IIS的支持,因此鼓励使用IIS的站点更改为受支持的web服务器。如果您遇到错误,建议您联系成都长风云Drupal开发团队,他们在Drupal升级方面拥有丰富的经验。
六、依赖关系
Symfony 7
jQuery 4
PHPUnit 10
composer 2.7.7
有关平台要求的更多信息可在drupal.org上找到。
运行弃用扫描
与之前的现代Drupal主要版本升级一样,Drupal 10.3和Drupal 11.0之间的主要区别在于删除了所有弃用的代码。这意味着,如果你的网站中有依赖于删除的PHP代码的功能,你会遇到错误。因此,我们希望预先避免这种情况。您可以在网站上使用许多工具来告诉您是否与Drupal 11兼容。
这里强烈推荐的一个解决方案是upgrade status模块

七、分析升级状态
upgrade status在一定程度上有助于将流程“游戏化”,为您提供可能需要执行的下一步的清单。
使用管理员>>报告>>升级状态页面检查是否有可以更新以获得兼容性的贡献模块。该模块还将帮助您了解可以在自定义代码中修复的不推荐使用的API。使用最新的Drupal 10.3版本进行检查,以确保所有弃用的API都是可检测的。
八、利用Drupal Rector
Drupal Rector也可以帮助自动修复代码问题。您应该使用drupal rector来检查和更新自定义代码中的任何问题。升级状态将帮助您确定在哪里采取必要的行动。Drupal Rector还将采取在代码中留下“待办事项”注释的步骤,以指导人们需要做什么。立即了解更多关于Drupal Rector的信息
九、检查项目更新机器人
目前,drupal.org上的贡献项目正在接受Project Update Bot的帮助,为drupal 11做好准备。该机器人在drupal.org上的每个项目上运行,并引发了需要解决的兼容性问题。了解Drupal.org上的项目更新机器人
请记住,今天可能仍然有不兼容D11的模块。这可能会阻止您进行更新,除非您能帮助准备好这些项目(或者从项目中删除它们)。如果您需要一个尚未准备好的贡献项目,升级状态将帮助您找到正在讨论所需修复的现有问题。
十、修正已弃用的自定义代码
就像更正任何贡献的代码一样,在收到升级状态报告后,您需要检查您的自定义代码。你可能很幸运,只需要做一些修改,但事实是,在所有Drupal应用程序代码都得到纠正之前,任何形式的试运行或向Drupal 11的实际过渡都无法进行。
通常,您会发现折旧只需要进行轻微的修改(例如将一个函数或方法换成另一个)。
尽管如此,重要的是不要低估这些调整。如果不小心管理和验证,像一个单词这样简单的替换可能会破坏你的网站。
十一、根据需要更新其他工具
如果你的项目正在使用Composer所需的其他工具,你需要确保所有这些工具也与PHP 8.3和/或Drupal 11.x兼容。否则,这些工具将阻止你进行更新。这里的一个例子是BLT,它与Drupal 11不兼容(正在进行EOL)。如果你的项目正在使用BLT,那么在升级到Drupal 11之前,你需要将其从代码库中删除。如果您的网站托管在Acquia Cloud上,并且您正在使用BLT,并且您计划从工作流和代码库中删除BLT,那么dev.Acquia.com上有一个关于删除BLT的很好的教程。
十二、运行 Dry Run
如果你过去做过这种类型的更新,你可能和我一样,认为它至少会在第一次失败。这没关系,因为你应该一直在一个安全的空间里做这类工作和测试,比如本地沙箱或云IDE,如果出现问题,什么都不会发生。你可能会做几次模拟升级。
运行模拟升级: composer update --dry-run
一旦你得到一个没有错误的模拟运行结果,你就可以进行核心编辑器更新了。
If you still can't get a composer update drupal/core --with-all-dependencies to resolve into Drupal 11.x, you can always run composer why-not drupal/core 11.0 to get some insight into what in your composer dependency tree still requires something other than 11.x.
如果你仍然无法获得composer update drupal/core --with-all-dependencies 都要解析为drupal 11.x,你可以随时运行composer why not drupal/core 11.0,以了解Composer依赖树中仍然需要11.x以外的东西。
十三、始终备份所有内容
最后,当您准备将部署到生产环境中时,请确保您有代码和数据库的最新快照。假设您在其他环境中进行了模拟运行(并且成功了),那么您应该清楚地继续更新。但是,最好还是把事情备份起来以防万一。
八、专业的Drupal服务商
成都长风云Drupal开发团队从2008年开始专注于Drupal开发,已拥有17年的Drupal开发经验。无论您计划从Drupal7升级到Drupal11(或者Drupal10)还是基于Drupal开发新的系统、企业官网、电商网站,维护基于Drupal开发的系统等,我们都能依靠我们的专业技术为您完成。手机号:13795726015 或 微信号:changfengqj