Drupal 9升级到Drupal 10的“巧方法”

季宏言 |

现在是10月份了,马上11月1号Drupal 9就停止支持了,所以最近计划把手头的几个站点给升级到Drupal 10。之前网上有小伙伴说升级的过程困难重重,有很多模块还不支持10版本。所以我这里也记录下我升级过程中使用的一些巧方法。

首先,先检查下composet.json中都安装过哪些模块,有哪些模块不支持10版本的记录一下。 由于我现在(23年10月份)着手升级很多的模块都已经支持了10, 或者RC,dev版本的也支持了。然后在站点上把这些能支持10的模块给更新了。对于那些不支持10的,看看所需的功能是不是非常必要的,如不是必要的可以先卸载掉,等后续该模块适配了10在安装。等所有安装的模块都支持10之后,卸载drush11 (composer remove drush/drush),然后升级到10(composer update "drupal/core-*" --with-all-dependencies),再安装drush12(composer require drush/drush)。然后运行 

vendor/bin/drush updb
vendor/bin/drush cr

之后访问站点,检查站点是否正常。

这里我遇到了个问题就是,在drupal 9的时候我是直接运行drush updb就可以了,现在drupal 10 了我要运行 vendor/bin/drush updb,不知道是什么原因,如有大佬知道还请指导一下。

下面说说我遇到的问题和解决办法:

问题1:升级之后站点访问正常,就是做一些增删改的动作会遇到不可知的错误。报错如下:

AH01071: Got error 'PHP message: TypeError: implode(): Argument #2 ($array) must be of type ?array, bool given in /www/wwwroot/mywebsite/vendor/asm89/stack-cors/src/CorsService.php on line 199 
#0 /www/wwwroot/mywebsite/vendor/asm89/stack-cors/src/CorsService.php(199): implode()\n
#1 /www/wwwroot/mywebsite/vendor/asm89/stack-cors/src/CorsService.php(133): Asm89\\Stack\\CorsService->configureExposedHeaders()\n
#2 /www/wwwroot/mywebsite/vendor/asm89/stack-cors/src/Cors.php(59): Asm89\\Stack\\CorsService->addActualRequestHeaders()\n
#3 /www/wwwroot/mywebsite/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Asm89\\Stack\\Cors->handle()\n
#4 /www/wwwroot/mywebsite/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\\Core\\StackMiddleware\\ReverseProxyMiddleware->handle()\n
#5 /www/wwwroot/mywebsite/web/core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\\Core\\StackMiddleware\\NegotiationMiddleware->handle()\n
#6 /www/wwwroot/mywebsite/web/core/lib/Drupal/Core/DrupalKernel.php(...', referer: https://mywebsite.com/user/login

解决办法1:这个是CORS的问题,但是我不知道如何配置service.yml。所有我就重命名/web/sites/default/service.yml 

mv /web/sites/default/service.yml /web/sites/default/service.yml.bak

 

下面来说说我的巧方法:

和正常升级一样,先在原站点上把所有安装的模块升级到支持10版本的。然后直接新安装一个站点

composer create-project drupal/recommended-project:10.1.* "mydir"
cd mydir
然后安装原站点上所有的模块
composer require drupal/*

保证composer.json文件中require的部分的安装模块是一致的。

之后复制原站点中sites,themes(如果有自定义的主题)到mydir/web里面

然后删除原站点文件夹,修改mydir为mywebsite。升级清理缓存之后应该站点可以正常访问的。

 

 

 

添加新评论

此字段内容将保密,不会被其他人看见。