Skip to content

Commit 9179854

Browse files
committed
✍️14. 代码更新时的注意事项.md
1 parent 06e18ed commit 9179854

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
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+
![](https://github.com/wi1dcard/laravel-deployment/raw/master/src/images/805bad7e8d753026ffb16837dfcf9ee4.png)
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+
```
322 KB
Loading

0 commit comments

Comments
 (0)