跳转到主要内容

Linux环境使用Composer来更新drupal 8/9

概述

drupal 使用composer来进行管理是非常方便的,特别是8.8之后的版本,部分插件因为涉及依赖,不使用composer,手动维护会变得比较棘手。用3行命令升级到最新版本的感觉,想想都让人激动。本文前面讲方法,后面讲排错。国内环境请确保先将composer源设置成阿里镜像

升级准备

使用此方法需要熟悉drush的基本命令,开始升级之前,先将网站设置成维护模式

# 此操作也可在网页后台完成
drush state:set system.maintenance_mode 0 
drush cr

使用drupal/recomended升级

检查项目是使用drupal/recomended 还是drupal/core,通常8.8.0之前的版本会使用drupal/core

# 已经安装则会输出core-recommended信息
composer show drupal/core-recommended
如果使用以下命令创建项目,则默认是drupal/recomended
composer create-project drupal/recommended-project my_site_name_dir
查看可用更新
composer outdated "drupal/*"
# 或者
composer update --dry-run "drupal/*"
升级core命令如下
composer update drupal/core-recommended --with-dependencies
drush updatedb
drush cr
如果没有drush,则在域名后加/update.php完成升级,但还是建议使用drush,composer安装drush很简单
# 在有composer.json目录运行
composer require drush/drush
想升级到dev分支也是可以的,比如8.9.x
composer require drupal/core-recommended:8.9.x-dev --update-with-all-dependencies

使用drupal/core升级

如果没有drupal/recomended则使用老方法升级

composer update drupal/core --with-dependencies
drush updatedb
drush cr

没有drush时,处置方法同drupal/recomended

在生产环境中更新

在生产环境中使用composer建议先做一些测试,避免更新不成功带来麻烦。当然最稳妥的习惯和办法还是在更新前给网站做数据备份。

先在本地的开发环境中完成以上更新,在确保更新成功之后,将composer.json和composer.lock拷贝并覆盖生产环境中的同名文件。

# no-dev将不会安装生产环境不需要的模块
composer install --no-dev
drush updatedb
drush cr

完成以上操作,升级完成,将网站上线即可。

常见错误

在使用composer过程中,比较常见的问题就是内存错误:

Composer: PHP Fatal error: Allowed memory size exhausted

要处理这个错误,首先建议升级composer到最新版本

composer --self-update
# 完整版命令
php composer.phar --self-update

内存不足,我们可以临时为composer分配一些内存

# 大小也可写成2G
# 使用-1 则不限制内存
COMPOSER_MEMORY_LIMIT=2048MB php composer.phar update
# 简化命令
COMPOSER_MEMORY_LIMIT=2G composer update drupal/core-recommended --with-dependencies -vvv

另一种方式就是增加php的执行内存

#如果-1则不限制
php -d memory_limit=2G composer.phar update ...

以上操作需要确保已经在linux环境中已经安装了zip,unzip和php-zip,否则会出错

# centos环境
(sudo) yum install zip unzip php7.4-zip
# ubuntu 环境
(sudo) apt install zip unzip php7.4-zip

 

参考:

https://getcomposer.org/doc/articles/troubleshooting.md

https://www.drupal.org/docs/updating-drupal/update-drupal-core-via-composer

分类