|
| 1 | +# 代码更新时的注意事项 |
| 2 | + |
| 3 | +在上一节中,我们使用 `git reset` 命令轻易地实现了代码文件的更新和回滚。然而,对于大多数 Laravel 应用来说,版本升级并非「更新代码」那么简单。本小节列出一部分常见注意事项,请仔细阅读。 |
| 4 | + |
| 5 | +## Artisan down |
| 6 | + |
| 7 | +在更新代码之前,建议使用 `artisan down` 命令,使 Laravel 进入维护模式: |
| 8 | + |
| 9 | +```bash |
| 10 | +$ cd /var/www/deployment |
| 11 | +$ php artisan down |
| 12 | +``` |
| 13 | + |
| 14 | +命令行将会输出: |
| 15 | + |
| 16 | +``` |
| 17 | +Application is now in maintenance mode. |
| 18 | +``` |
| 19 | + |
| 20 | +此时 Laravel 将会暂停所有任务(包括 Queue、Schedule 等),并拒绝请求流量进入正常的处理逻辑。你可以尝试在浏览器内查看,将会看到 `503 Service Unavailable` 而非正常的应用页面,例如: |
| 21 | + |
| 22 | + |
| 23 | + |
| 24 | +接下来你可以执行正常的更新逻辑,而不必担心用户访问得到错误的响应了。 |
| 25 | + |
| 26 | +## Composer install |
| 27 | + |
| 28 | +在代码更新后,必不可少的一步操作便是同步「更新」依赖。再次运行安装依赖时使用的命令即可: |
| 29 | + |
| 30 | +```bash |
| 31 | +$ composer install --optimize-autoloader --no-dev |
| 32 | +``` |
| 33 | + |
| 34 | +> 注意:此处并非使用 `composer update`,切勿混淆。`composer update` 将会忽略 `composer.lock` 文件,将依赖包更新至与版本约束相兼容的最新版本;因此该操作应当确保仅在本地执行。更多细节请阅读 [Composer 中文文档](https://learnku.com/docs/composer/2018/03-cli/2084)。 |
| 35 | +
|
| 36 | +## 清理缓存 |
| 37 | + |
| 38 | +此处提到的缓存分为两类: |
| 39 | + |
| 40 | +1. Laravel 框架缓存(配置缓存、路由缓存、视图缓存等) |
| 41 | +2. OPCache 缓存 |
| 42 | + |
| 43 | +对于第一类,可直接使用以下命令: |
| 44 | + |
| 45 | +```bash |
| 46 | +$ php artisan optimize:clear |
| 47 | +``` |
| 48 | + |
| 49 | +> 注意:清理缓存后,请务必使用之前小节中提到的 `php artisan route:cache` 和 `php artisan route:cache` 再次重建缓存,避免影响性能。 |
| 50 | +
|
| 51 | +对于第二类,其中一种方法是重载 PHP-FPM 服务: |
| 52 | + |
| 53 | +```bash |
| 54 | +$ service php-fpm reload |
| 55 | +``` |
| 56 | + |
| 57 | +另一种更加优雅且无需重启服务的方法是通过 PHP 的 [`opcache_reset`](https://www.php.net/manual/en/function.opcache-reset.php) 函数。在命令行中,可使用一款名为 [CacheTool](https://github.com/gordalina/cachetool) 的小工具,它提供了用于管理缓存的 CLI 命令: |
| 58 | + |
| 59 | +```bash |
| 60 | +# 下载 |
| 61 | +$ curl -sO http://gordalina.github.io/cachetool/downloads/cachetool.phar |
| 62 | +# 赋予执行权限 |
| 63 | +$ chmod +x cachetool.phar |
| 64 | +# 重置缓存 |
| 65 | +$ php cachetool.phar opcache:reset --fcgi |
| 66 | +``` |
| 67 | + |
| 68 | +其实,CacheTool 还支持 APC、APCu,且具备查询和统计功能,你可以阅读它的文档获取更多用法。 |
| 69 | + |
| 70 | +## 文件权限 |
| 71 | + |
| 72 | +又是文件权限。是的,没错。 |
| 73 | + |
| 74 | +由于我们使用 Git 部署应用代码,而 Git 仅存储「文件所有者是否具备运行权限」,对于读、写以及其它身份的权限,Git 并不关心。 |
| 75 | + |
| 76 | +> 提示:有兴趣了解 Git 如何处理文件权限,可阅读 [这篇博客](https://medium.com/@tahteche/how-git-treats-changes-in-file-permissions-f71874ca239d)(英文)。 |
| 77 | +
|
| 78 | +因此,保险起见,务必在每次更新或回滚后,使用 `chmod` 和 `chown` 等命令,重置文件权限。 |
| 79 | + |
| 80 | +> 提示:其实这是直接使用 Git 更新代码的「缺点」之一,在后续课程中将会解决,欢迎继续关注。 |
| 81 | +
|
| 82 | +## Artisan up |
| 83 | + |
| 84 | +`artisan down` 的对应操作是 `artisan up`,在升级完毕、确认无误后,最后一步操作便是执行此命令,使你的站点恢复正常访问: |
| 85 | + |
| 86 | +```bash |
| 87 | +$ php artisan up |
| 88 | +``` |
0 commit comments