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 新代码生效

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7

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 服务器才能加载最新版本的代码。

11个月前 评论
Smilephp (作者) 11个月前
shiwuhao (楼主) 11个月前

用 stop 就行了,让 supervisor 处理重启

11个月前 评论
shiwuhao (楼主) 11个月前
AbrahamGreyson 3个月前
shiwuhao (楼主) 2个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!