春秋战国时期的墨菲子说过:If it can go wrong, it will.
有人说Vibe Coding省时省力省学习,有人说你不会的就是不会AI救不了你。
在我看来这两条都对。对于一个外行要Vibe~~打金~~编程来说,AI确实能帮很大的忙,你不会的它可以教你,你懒得做的它可以帮你做,甚至你没想过的创意它都可以帮你想……
……但是!!!
你在技术上没踩过的坑,它不会帮你去踩;你没意识到的问题,它也不会帮你去预测;而你遇到的BUG……绝大多数就是它给你写出来的!
所以说技术大牛们最牛的地方,可能就是踩过足够多的坑。
在AI时代,知识的积累、技巧的掌握可能已经不像以前那么值钱了。
但正如在我们面前的:伟大的Emacs的宇宙编织者 · 二十载Linux世界的守护者 · ChatGPT的bug低语者 · 腾讯服务的诲灭者 · 懒猫微服的神奇创造者 · 沙漠公路的吟游诗人 · 书海与实践的至高征服者 · 代码之王 · 专业菜农 · 网络卖瓜高手 · 抽奖的狂热组织者 · 开发者们的金主爸爸 · 猫王说过的:
**反复失败的痛苦经验才是技术大佬们的财富。**
OK,下面言归正传,讲讲调试用到的工具和我的体验。
如果你是大神,现在就可以关闭文章了Bye不送;但如果你是小白,这篇文章应该可以让你一次性搞明白调试那点儿事。
---
Devshell
关于Devshell的技术原理,请先阅读忘神的这篇[《懒猫微服开发篇(二):远程调试之Devshell》](https://lazycat.cloud/playground/#/guideline/657)
> 忘神说:devshell 其实就是在微服上打开了一个虚拟机环境,然后我们可以进去里面测试我们的命令。非要说技术实现,那就是 docker exec 了。只不过是做成了本地和微服之间同步的样子。
我不懂,在这里只说使用体验,一个外行的体验。
要启动它只需要一条命令(前提是安装了lzc-cli):
```
lzc-cli project devshell
```

只要配置文件正常,你的应用就会立即安装到懒猫里,点开就可以查看了。
某一些文件尤其前端的修改可以直接看到效果。尤其是如果根据技术文档,在lzc-build.yml里写上:
```
devshell:
routes:
- /=http://${开发机的局域网IP}:3000
```
就可以利用本地的服务直接在应用里预览,修改代码马上可以在应用中预览,这可真是太神奇了。
不过毕竟devshell是一个特别的虚拟环境,好像映射的路径还和应用打包时的alpine环境不太一样,所以在调试后台时(至少以我的水平)有一些脚本和路由还是会出问题,导致我纠结摸索了好几天。
所以建议前端开发到了一定的程度,还是要正规打包上传到懒猫再测试后端接口之类。
---
应用日志
要调试就要用到日志,如果你安装了懒猫开发者工具,那么可以从那里找到入口,在客户端的应用右上角菜单也可以更快捷地找到“查看日志”的入口。
或者如果你觉得不方便(查看日志和打开应用是用的同一个窗体,意味着不能边预览边看日志),你也可以访问
```
https://dev.<设备名>.heiyu.space/dozzle
```
找到查看日志的工具Dozzle

你的应用在运行时的的所有日志都会即时显示在这里。
---
SSH登录
SSH登录的方式很简单,可参考:
[官方技术文档](https://developer.lazycat.cloud/ssh.html)
大佬们可能是需要SSH去做一些深层的控制和应用,但对我们小白来说,当然不敢乱改,但是可以找到应用的文件夹去看里面的结构。
尤其是在我还搞不清状况而且被devshell的路径映射搞不明白时,打开SSH看看里面具体是怎么存的,顺便看看别人的应用是怎么写的,还是相当有帮助的。
应用安装在懒猫中的实际地址是:
```
/data/system/pkgm/apps/cloud.lazycat.app.<appid>(其实整个就是package-id)/pkg/content
```
如果只是想移植Docker应用,从里面可以直接学到别人怎样移植,会更有帮助。
---
Windows权限问题
这个问题直接或间接折腾了我至少三天!直到刚刚才完美解决。
我之前是用mac编程的没碰到这个问题,由于开发应用大多数时间需要用到后台,比如我用node.js就需要启动服务端express监听3000端口。在路由中是有一个直接命令可以运行一个启动脚本的,比如:
```
/=exec://3000,/lzcapp/pkg/content/run.sh
```
理论上直接在这里写上系统初始化的命令就好,比如在默认的alpine容器中安装node和npm,并运行npm install && npm run start之类。
但是,在实际操作中,因为windows的文件系统不像linux,是没有文件的执行权限这一说的。所以即使打开WSL运行了chmod +x run.sh,回到cmd或powershell之后再用lzc-cli project build去打包,这个执行权限就会被抹掉。
结果是执行文件时你在日志中会发现这个启动脚本因为没有执行权限而无法运行!
在开始的几天,我一直是用一台旧的mac去打包,虽然也可以用mac编码,但毕竟用起来不舒服,而两台机器来回倒又太麻烦了。
后来直到在VIP群中问过后,E神给了我一段代码:
```
/=exec://3000,install -m 755 /lzcapp/pkg/content/run.sh /tmp;exec /tmp/run.sh
```
我才意识到原来这里可以写代码的,可是……实测仍然不行,报错说hostname中不能有空格。
但是举一反三聪明如我,马上想到了在开发文档看到过的[upstreams](https://developer.lazycat.cloud/advanced-route.html)方式。
于是马上测试,由于单条的命令还是会报错(系统找不到文件,可能是路径映射之类的问题?),于是我又灵机一动,直接把安装命令写进去不就行了?
```
upstreams:
- location: /
backend: http://127.0.0.1:3000/
# backend_launch_command: install -m 755 /lzcapp/pkg/content/run.sh /tmp;exec /tmp/run.sh
backend_launch_command: |
cd /lzcapp/pkg/content
apk update
apk add nodejs npm
npm run start
```
实测成功!终于避开了windows下启动脚本执行权限的问题。
---
说实话,我本来想把我踩的所有坑都吐槽出来,但发现其根本原因其实是……
我很弱。
有很多坑本来是很基础很小的问题,但正如开头所说,你该踩的坑,迟早还是要踩。AI也不会替你避坑。
不过,至此,总算,终于,就在这个时刻……
全部调式功能都齐备了,之前遇到的连AI也搞不清的问题迎刃而解。
我可以继续我的应用开发了,下回见~
相关链接:
Refly画布