AstroResearch/docs/troubleshooting.md
Asfmq 8cc2b74abc feat: 手动上传绕防爬、下载错误诊断与健康检查工具;模块化重构 API 与批量同步
后端:
  - 将 handlers.rs (1338行) 拆分为 helpers/papers/notes/sync 四模块
  - 将 batch_sync.rs 拆分为 batch/{mod,meta,asset} 三模块
  - 新增 POST /api/upload 多部件文件上传接口
  - 新增 POST /api/no_resource 标记文献"无全文资源"
  - 新增 GET/POST /api/active_bibcode 追踪活跃文献
  - StandardPaper 结构体扩展 pdf_error / html_error 错误诊断字段
  - download.rs 记录下载失败详情至数据库
  - 新增 health_check 二进制工具,支持只读扫描与 --fix 自动修复
  - 移除 scratch/ 目录、recovered_handlers.rs 及调试日志

  前端:
  - 新建 CustomSelect 可复用组件,替换全部原生 select
  - LibraryPanel:同步按钮反馈动画、下载失败/无资源状态筛选与计数、
    文献类型筛选、状态优先排序、搜索一键清空
  - 详情弹窗:错误诊断展示、手动 PDF/HTML 上传区、无资源标记/恢复
  - SearchPanel:扩展文献类型徽章、下载失败状态提示
  - SyncPanel:同步启动乐观 UI 更新、日志容器内自动滚动
  - Tab 状态 localStorage 持久化、弹窗 z-index 修复
2026-06-11 22:56:36 +08:00

7.8 KiB
Raw Blame History

AstroResearch Troubleshooting / 常见问题与排障指南

在使用 AstroResearch 过程中可能遇到的问题及排障步骤如下:


1. 文献下载相关问题 (Download Issues)

1.1 下载任务遇到 "检测到 Cloudflare / 人机验证页面"

  • 原因:部分出版商对频繁的自动化下载请求实施了高强度的 IP 拦截与 CF 校验。
  • 解决方法
    1. 系统目前已经实现每两次请求间随机延迟 maybe_delay() (500ms~2000ms),以防行为过于机械化。
    2. 若拦截频繁,可以尝试在本地配置代理;或者检查 .env 中的 LIBRARY_DIR 路径是否正确。
    3. 对于 ADS Link Gateway 路由,若跳转至 validate.perfdrive.com,下载器内置了解码 ssc 提取直链的策略,该过程自动进行,如果由于其加密机制变更导致提取失效,系统控制台会输出 warn 日志。
    4. 下载失败后,系统会在数据库中自动记录以 error: 前缀的诊断信息。前端文献卡片会以红色角标标识"下载失败",鼠标悬浮可查看具体失败原因。

1.2 官方 HTML (arxiv.org/html) 下载返回 404

  • 原因arXiv 官方 HTML 正文服务仅在 2023年12月 之后提交的论文中默认提供。对于老文献,直接请求官方 HTML 会返回 404。
  • 解决机制AstroResearch 的 download_arxiv_html_with_fallback 会在官方 HTML 请求失败时,自动无缝降级回退ar5iv.labs.arxiv.org 服务进行拉取。

1.3 通过手动上传或浏览器书签直推绕过 Cloudflare 防爬

  • 原因:部分出版商对自动化脚本下载防范严密,直接通过后台任务下载容易导致获取失败(并在数据库中存入带有 error: 前缀的报错描述)。
  • 解决方法
    1. 方案 A (详情弹窗手动上传):在文献详情弹窗中,点击文献直链(系统会使用您本人的真实浏览器和网络环境打开源站),手动下载 PDF 或 HTML然后拖拽/上传至详情弹窗对应的上传区。
    2. 方案 B (书签直推导入):在批量同步面板底部,点击"添加导入书签"按钮,或将其直接拖拽至您的浏览器书签栏(书签名为"导入AstroResearch")。当您使用真实浏览器访问文献源站(如 arXiv 页面)时,点击该书签,在弹出的窗口中确认 Bibcode即可直接将解析后的内容通过 API 直推同步到本地。

1.4 标记文献为"无有效全文资源"

  • 原因:部分文献(如会议摘要、天文电报、观测提案等)本身不存在可下载的全文 PDF/HTML反复尝试下载会浪费时间。
  • 解决方法
    1. 在文献详情弹窗底部,点击"标记为无有效全文资源"按钮。
    2. 标记后,文献卡片角标变为灰色"无资源"状态,后续批量下载/解析任务将自动跳过此文献。
    3. 若需恢复,再次点击"恢复自动下载状态"按钮即可清除标记。

2. 文献解析与翻译问题 (Parse & Translation Issues)

2.1 翻译请求返回空或报错 "LLM API KEY Missing"

  • 原因:根目录下没有配置正确的 .env 文件,或者 LLM 提供的 Endpoint/Model 有误。
  • 排查步骤
    1. 确认项目根目录下存在 .env 且拥有 LLM_API_KEYLLM_API_BASE 配置。
    2. 使用终端运行 cargo run,检查启动日志中是否有关于读取环境配置的警告信息。

2.2 PDF 解析缺少图表或公式损坏

  • 原因PDF 格式本身不支持结构化语义。直接提取文本会丢失公式和图表。
  • 解决机制
    1. 如果文献有 HTML/ar5iv 格式,系统会自动优先基于 HTML 解析,保留完美的 LaTeX 公式。
    2. 若该文献只有 PDF 格式,系统自动降级调用本地或远程的 MinerU PDF 图文大模型解析。请确保本地 MinerU 解析服务已按照 API 格式运行并在 .env 中正确填入 MINERU_API_URL

3. 检索与显示问题 (Search & Display Issues)

3.1 无法通过特定的 arXiv ID 或 DOI 检索到已导入的文献

  • 原因:历史版本前端本地检索仅匹配了文献的标题、作者、摘要和 bibcode,未对 arxiv_iddoi 进行全局检测过滤。
  • 排障/解决:现已在馆藏过滤逻辑中追加了 arxiv_iddoi 的字段检索。如果遇到由于升级导致的缓存错乱,可点击顶部的 "重新同步馆藏" 刷新本地缓存状态。

3.2 文献详情页的 BIBCODE 与 ARXIV ID 显示完全相同的值(如均显示 '0710.0600'

  • 原因:当文献通过 arXiv 单独直接导入时,后端处理器无法预知其关联的 ADS Bibcode。为确保数据一致系统在 SQLite 中临时将 bibcodearxiv_id 均用 arXiv ID 填充,直到后续 ADS 元数据同步匹配成功将其"升级"。
  • 解决机制:前端已实现了防重与标识规整机制。如果检测到 bibcode === arxiv_id,卡片页将前缀格式化为 arXiv:xxxx.xxxx 形式,而文献元数据详情弹窗中 BIBCODE 则会直接优雅呈现为 "暂无" 状态,避免视觉歧义。

3.3 馆藏面板"重新同步馆藏"按钮点击后没有反馈

  • 原因:早期版本中同步操作是异步静默执行的,用户无法感知操作进度。
  • 解决机制:当前版本已增加同步反馈机制:
    • 点击按钮后显示加载动画(旋转图标 + "正在同步..." 文字)。
    • 同步完成后弹出绿色成功提示条(显示馆藏数量),或红色错误提示条。
    • 反馈信息 3 秒后自动消失。

4. 数据库与运行环境问题 (Runtime & DB Issues)

4.1 启动提示 "Database Migration Failed"

  • 原因:本地 SQLite 数据库文件 astro_research.db 出现并发锁死或版本 schema 冲突。
  • 解决方法
    1. 备份并临时删除根目录下的 astro_research.db 数据库文件。
    2. 重新启动服务:cargo run,系统将重新执行 migrations/ 下的全部 SQL 迁移脚本以建立最新库结构。

4.2 馆藏文献健康度检查工具 (health_check)

  • 原因:大批量文献下载、解析或手动增删物理文件后,可能存在数据库状态与物理文件不一致的情况。
  • 排障与修复步骤
    1. 只读扫描:运行 cargo run --bin health_check。此操作将扫描本地物理文件并验证它们是否损坏,检测数据库是否有丢失物理文件、报错记录(以 error: 开头)或孤立 Markdown 的文献。
    2. 一键修复:运行 cargo run --bin health_check -- --fix 执行修复:
      • 系统将自动删除磁盘上损坏的 PDF/HTML 物理文件,并在数据库中将其重置为 NULL 以便后续重新触发下载。
      • 系统将自动删除孤立的 Markdown 物理文件并将其重置为 NULL
      • 特别注意:对于数据库中已存入的 error: 报错诊断信息,为了保留报错排障的有用线索,修复程序不会删除这些报错记录(即不会重置为 NULL),以便您后续查看与手动上传修复。

5. 前端界面问题 (Frontend UI Issues)

5.1 下拉选择框样式与浏览器原生样式不一致

  • 原因:系统使用自研的 CustomSelect 组件替代了原生 <select> 元素,以实现统一的视觉风格和交互体验。
  • 说明:所有下拉框(状态筛选、文献类型筛选、排序方式、检索条件组合等)均已统一使用 CustomSelect 组件,支持点击外部自动关闭、选中项高亮等交互。

5.2 同步面板日志自动滚动干扰全页浏览

  • 原因:早期版本中日志自动滚动使用 scrollIntoView 会影响整个页面。
  • 解决机制:当前版本改为仅滚动日志容器内部元素,并增加了 80px 的阈值判断,只有当用户处于接近底部的阅读位置时才自动滚动追踪最新日志。