dd/docs/maintenance/BOOK.md

4.0 KiB
Raw Blame History

Book 与 cmd

Book是master01的Telegram层级笔记模块;数据为book、book_page、book_option、book_hook。它与旧后台的nasa_book说明书表不同。资源、归属和私有资料入口见GemDocs模块档案,本文只维护实现及排障。

调用链

GET /cmd加载resources/views/cmd.blade.php,用户提交时POST到/cmd/send。CmdController::ajaxSend()按dove_site表的code读取www与api_path,向目标发送带shell=cmd的模拟更新;默认站点master映射至master.diaodu.us/api/tg/hook。不要把浏览器所用白色机反代入口与服务器内部的转发目的地混为一处配置。

HookController::cmd()把/book#main分派到Services/Tg/Hook/Mod/Book::main(),后者通过BookHook::_cd()把当前用户名的位置改到根目录,再调用openRe()重新查询/渲染并更新book_page缓存。Services/Tg/Http::send()遇到shell=cmd只向HTTP响应输出,不发送Telegram。

2026-10-20 根目录空白调查

用户反馈右侧线上cmd运行/book#main没有内容。只读读取当前页面确认站点master、用户tom、hook为空、命令如上,结果区为空;未重新提交命令。经白色机SSH确认生产21ab4b84,CmdController、HookController、Book处理器、Book模型和cmd视图与本地SHA-256一致。

数据库在READ ONLY事务内查询后回滚,仅回传计数、状态和脱敏错误;没有输出笔记正文。book共570行,根目录有17条非删除记录,根节点id=1存在,limit=100,根目录缓存page=1、正文342字节。根节点的like字段非空(更新时间2026-10-13 16:38:58),无sort和自定义where。Book::_path('/', 1)应用该筛选后0条,纯渲染结果0字节;Book::_path('/', 'all')跳过视图筛选后17条,纯渲染342字节。服务器正常HTTPS请求/cmd返回200且包含命令输入框。

原因:Models/Book::_path()将父节点的持久化like作为rag搜索条件,main()只切换路径,不重置该条件。无匹配时open()调用bookToStr([]),在没有其他状态标记的情况下输出空串,界面没有说明仍处于筛选状态。现有笔记没有因本次问题消失;未追溯是谁设置筛选,不把节点订阅改动归因为Book故障。

恢复与检查边界

在目标站点master,先运行/book#main确保当前位置为根目录,再运行/book#unlike。unlike()仅清空当前父节点的like字段并重新生成该页,不删除笔记。该筛选属于目录记录,是共享状态,不能当作单用户浏览器筛选。

本次为调查,未执行恢复命令、修改数据库、清空缓存、发送Telegram消息或改动生产代码。恢复后的真实cmd显示尚未验收;上述17条/342字节是服务器内只读查询和纯渲染证据。

2026-10-20 账号目录no1显示12条却空白

用户继续反馈no1显示12条、进入后没有内容。只读查看右侧页面确认:用户tom、站点master、hook为/book#,当前显示账号目录,no1为“日本 *12”。线上只读事务确认当前位置/58/,no1对应id=59、目标路径/58/59/。账号目录自身无like/sort/where筛选,第一页3条;日本目录有12条未删除记录、limit=30、缓存页码1,无sort和where,但有独立非空like筛选(更新时间2026-10-13 16:38:17)。按第一页查询0条,跳过视图筛选后12条,因此不是页码超界或数据丢失。

*12由Book::_SubCount()按path和is_del=0直接计数,不应用目录筛选;进入目录后Models/Book::_path()才应用该目录like。因此数量和可见结果会不同。根目录执行unlike不会清空子目录筛选。

本页已有/book# hook时,在命令框依次输入no 1、unlike即可针对日本目录取消筛选;不要再把完整/book#重复输入到命令框。此操作会清空日本目录的共享筛选并刷新页面缓存。本次只读调查未执行它,也未批量清空其他目录的筛选。