基于windows10 下 docker-compose 的 laravel + swoole 暴力热更新
基于docker-compose 的 laravel + swoole 暴力热更新
环境
windows: 10
php: 8.1.3
swoole: 4.8.8
laravel: v9.8.1
docker: v20.10.14
问题描述
用了 inotify, 这些发现不生效, 最后发现是由于windows 的 WSL2 的文件共享,不是基于linux 内核的变更实践,所以windows inotify 不生效。
解决原理
- 将须要监听的目录进行压缩,生成压缩文件
- 对比前后的压缩文件是否有差异,有差异表明有修改,则执行reload 命令。
解决方案
在根目录创建 hot_reload 文件夹
hot_reload.sh
#! /bin/bash
hot_reload_dir="/app/laravel_project/app"
file1=/app/laravel_project/hot_reload/app.tar
file2=/app/laravel_project/hot_reload/app.old.tar
# 每秒执行一次死循环
touch hot_reload/app.tar
while [ true ]; do
# /bin/date >>/tmp/date.txt
# 将文件压缩
mv hot_reload/app.tar hot_reload/app.old.tar
tar -cvf hot_reload/app.tar app > /tmp/test.txt
# 中断一秒循环
# /bin/sleep 1
diff $file1 $file2 > /dev/null
if [ $? != 0 ]
then
# echo "Different!"
php /app/new_crm/artisan swoole:http reload
else
# echo "Same!"
/bin/sleep 0.5
fi
done
#
本作品采用《CC 协议》,转载必须注明作者和本文链接