laravel octane 切换软链接方式部署代码,热重启无效
1. 运行环境
1). 当前使用的 Laravel 版本?
laravel9
2). 当前使用的 php/php-fpm 版本?
PHP 版本:8.0.20
php-fpm 版本:未使用php-fpm
3). 当前系统
centos7
4). 业务环境
生产环境,未使用负载均衡
5). 相关软件版本
nginx version: nginx/1.22.0
2. 问题描述?
Laravel Octane swoole作为服http服务,nginx做代理,supervisor守护进程
使用deployer以切换软链接的方式部署代码,项目路径 /data/web/project/current。
通过 php artisan octane:reload 重载 Workers无效。
通过 php artisan octane:stop 停止后,php artisan octane:start 生效
# supervisor配置
[program:operate-octane]
process_name=%(program_name)s
command=/bin/php -d variables_order=EGPCS /data/web/project/current/artisan octane:start --server=swoole --workers=50 --host=127.0.0.1 --port=8000
autostart=true
autorestart=true
user=phpci
redirect_stderr=true
stdout_logfile=/var/log/operate-octane.log
3. 您期望得到的结果?
软链接部署后,使用php artisan octane:reload 重启,新代码应该生效
4. 您实际得到的结果?
软链接部署后,使用php artisan octane:reload 重启,新代码未生效。
通过 php artisan octane:stop 停止后,php artisan octane:start 新代码生效
关于 LearnKu
gpt 的回答
在使用 Deployer 以切换软链接的方式部署代码时,每次部署时都会将最新版本的代码放置在 /data/web/project/releases 目录下,并将 /data/web/project/current 软链接指向最新版本的代码。这意味着,每次部署时,Octane 服务器都会加载最新版本的代码。
当您使用 php artisan octane:reload 命令重载 Workers 时,Octane 服务器会尝试重新加载代码。但是,由于您使用的是软链接,Octane 服务器实际上加载的是旧版本的代码,而不是最新版本的代码。因此,重载 Workers 无效。
相反,当您使用 php artisan octane:stop 命令停止 Octane 服务器时,Octane 服务器会停止加载代码。然后,当您使用 php artisan octane:start 命令重新启动 Octane 服务器时,Octane 服务器会加载最新版本的代码,并启动 Workers。
因此,如果您想要在部署新代码后重载 Workers,您需要先停止 Octane 服务器,然后再启动 Octane 服务器。这样,Octane 服务器就会加载最新版本的代码,并启动 Workers。
希望这个解释能够帮助您理解为什么重载 Workers 无效,以及为什么需要停止和重新启动 Octane 服务器才能加载最新版本的代码。
用 stop 就行了,让 supervisor 处理重启