本文讲述怎样用 composer 和 git 结合升级(update) drupal 8 核心代码。
请注意,本文讲述的是 update 而不是 upgrade。 所谓 upgrade 是指从 drupal 7 升级到 drupal 8,或者从 drupal 8 升级到 drupal 9,也就是 drupal 主要版本的升级; 而 update 是指 主要版本内部的小升级,比如从 drupal 8.7.2 升级到 drupal 8.7.3,这样的升级就是 update.
注意,我们还是要先在本地开发环境做升级,然后把代码 push 到远程代码仓库,然后从远程代码仓库把代码拉到远程测试环境或者生产环境。千万别直接在生产环境升级,那样的话出了问题你就哭吧。
第一部分:在本地开发环境升级 drupal 8 核心代码
- 首先查看有无可用更新。如果查到核心(drupal core)有更新,那么进入下面的流程。查看可用更新有两种方法。一种是在管理后台点击“报告”,再点击“可用更新”,可用查出有无可用更新;另一种方法是在命令行中输入:sudo composer outdated “drupal/*” , 这样可以查看 drupal core 有无更新;如果输入 sudo composer update --dry-run, 则可以查看有哪些更新,以及在更新 drupal core 时 哪些模块也会更新。
- 首先要备份数据库。这个具体操作就不说了。
- 其次要备份程序代码。这个简单,也不说了。
如果你的网站是用 drupal-composer/drupal-project 这个模板安装的,那么请按照以下步骤更新 drupal core.
- cd your_web_project_folder (注意,此目录是 web 目录的上一层级,也就是说,它是网站根目录的上一级目录。)
- sudo git checkout dev // 切换到 dev 分支
- sudo composer update drupal/core webflo/drupal-core-require-dev --with-dependencies
- sudo drush updatedb
- sudo drush cr
- 然后到网站管理后台,点击“报告”,接着点击“可用更新”,如果发现现在已经是最新版了,说明代码更新成功。然后还需要执行一些简单的 crud 操作,看数据库更新是否成功。
- sudo drush sset system.maintenance_code 0
- sudo drush cr
- 在浏览器里输入网址以匿名用户测试是否OK。
- sudo git add .
- sudo git commit -m “updated drupal core to x.x.x"
- sudo git checkout master
- sudo git merge dev
- sudo git push origin master // 将代码 push 到远程代码仓库
第二部分: 在远程测试服务器/生产服务器安装更新
- cd path/to/your_project_folder (注意,此目录是 web 目录的上一级目录)
- 备份数据库
- 备份网站代码
- sudo vendor/bin/drush sset system.maintenance_mode 1 // 将网站设置为维护状态
- sudo vendor/bin/drush cr // 清理缓存
- sudo git pull // 从远程代码仓库拉下最新版的代码
- sudo composer install --no-dev // 更新代码
- sudo vendor/bin/drush updatedb // 更新数据库
- sudo vendor/bin/drush cr // 清理缓存
- sudo vendor/bin/drush sset system.maintenance_mode 0 // 取消网站维护状态
- sudo vendor/bin/drush cr //再次清理缓存