ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Anki 同步限制彻底解决:collection exceeds size limit 报错实操与避坑

Anki 同步限制彻底解决:collection exceeds size limit 报错实操与避坑 Anki 同步限制彻底解决collection exceeds size limit 报错实操与避坑【免费下载链接】ankiAnki is a smart spaced repetition flashcard program项目地址: https://gitcode.com/GitHub_Trending/an/anki在 Anki 里点同步弹窗跳出collection exceeds size limit进度条卡死不动——数据就在设备上却死活上不了服务器这正是 Anki 同步限制最典型的卡点。30 秒看懂限制卡在哪限制在服务端同步服务器把收到的集合文件解压缩后比对大小默认上限是 100MB × 3 300MB未压缩。它由环境变量MAX_SYNC_PAYLOAD_MEGS控制自托管的 Anki 同步服务器可以直接调大连 AnkiWeb 时这个值你改不了只能把集合瘦下来或自建服务器。拆解请求流四步看清拒绝时机触发全量同步换设备首同步、重建集合会上传整个集合文件入口在 rslib/src/sync/collection/upload.rs 的full_upload。客户端预检客户端会先拿文件大小比对限制但注意——这段检查只在端点是 ankiweb 时执行连自托管服务器时直接放行真正把关的是服务端。预处理上传前集合会走before_upload见 rslib/src/collection/mod.rs清掉墓碑记录、合并未同步 USN、优化数据库。能省一点但媒体臃肿的集合瘦不了多少。检查与拒绝服务端收到上传后的判断逻辑就是你看到报错的来源// rslib/src/sync/collection/upload.rs let max_bytes *MAXIMUM_SYNC_PAYLOAD_BYTES_UNCOMPRESSED as usize; if new_data.len() max_bytes { return Ok(UploadResponse::Err(collection exceeds size limit.into())); }默认值定义// rslib/src/sync/request/mod.rs env::var(MAX_SYNC_PAYLOAD_MEGS) .map(|v| v.parse().expect(invalid upload limit)) .unwrap_or(100) * 1024 * 1024未压缩上限 该值 × 3。另有一条隐藏分支服务端集合超限时rslib/src/sync/collection/meta.rs 的server_meta会强制单向下行同步——这就是同步只下载不上传的原因。自查定位判断你在哪一层看报错文案collection exceeds size limit是大小拒绝Your upload was corrupt是数据损坏不是大小问题方向完全不同。看连的哪台服务器首选项 → 网络里还是 ankiweb.net预检与 300MB 上限都是固定的只能瘦身或自托管。量集合文件看资料目录Linux 下~/.local/share/Anki2里的*.anki2*文件大小对照 300MB。定派别AnkiWeb 用户 → 零改动派有自托管服务器 → 改配置派需要突破配置值本身 → 动源码派。动手前分派零改动派 ️适用集合 150~300MB、连 AnkiWeb 的用户。前置无。跑一遍工具 → 检查媒体删除孤儿文件进collection.media文件夹按大小排序压缩 1MB 以上的图片用查找替换把长文本字段换成外链。确认生效再同步一次观察上传是否走通集合文件应缩小 10%~30%。回滚只删未引用文件无副作用保险起见仍建议先备份。改配置派调 MAX_SYNC_PAYLOAD_MEGS 到 500适用自托管 Anki 同步服务器用户。前置已按 docs/syncserver/README.md 用 docs/syncserver/Dockerfile 部署过服务器。先备份导出/anki_data卷里的数据或至少确认客户端最近一次备份时间早于本次改动重建容器时加一个环境变量即可# docs/syncserver/Dockerfile 部署命令 docker run -d \ -e SYNC_USER1admin:admin \ -e MAX_SYNC_PAYLOAD_MEGS500 \ -p 8080:8080 \ --mount typevolume,srcanki-sync-server-data,dst/anki_data \ --name anki-sync-server anki-sync-server客户端首选项 → 网络指向你的服务器地址账号密码对应SYNC_USER1的用户名:密码。确认生效docker logs anki-sync-server里没有invalid upload limit解析报错说明值写对了再同步一次看是否通过。回滚去掉该环境变量重建容器回到 100MB 默认值。动源码派改默认值或检查逻辑适用必须用自建服务器、且要完全掌控限制逻辑的开发者。前置能编译 Rust 同步服务器。你可以把 rslib/src/sync/request/mod.rs 里的unwrap_or(100)改成更大的默认值或者在handle_received_upload中放宽new_data.len() max_bytes的判断重新编译、替换镜像、按改配置派的方式验证与回滚。派别改动代价效果零改动派⭐集合缩 10%~30%适合 300MB 以内改配置派⭐⭐上限调到任意值受磁盘和内存约束动源码派⭐⭐⭐⭐检查逻辑完全可控落地 checklist备份、部署、验证一条线 ✅备份先行客户端导出.apkg或整份拷贝资料目录备份时间戳晚于上次成功同步检查媒体无错误collection.media里的大图已压缩记录改动前后的集合文件大小便于对比MAX_SYNC_PAYLOAD_MEGS已设置docker logs确认无解析报错客户端网络设置指向正确的同步服务器地址首次同步成功后抽查卡片数确认设备与服务器数据一致避坑与延伸改了限制仍会踩的坑磁盘与内存上限调到 500MB 意味着服务器要容纳更大的解压数据内存和/anki_data卷都要留足余量。媒体同步独立于集合大小媒体走单独通道rslib/src/sync/media/集合放行了媒体卡住仍会在日志里单独报错。用日志区分分支collection is too large, forcing one-way sync是单向下行分支exceeds size limit是大小拒绝分支两者解法不同。后续演进方向更细粒度的增量同步减少单次传输量媒体与结构化数据分离压缩媒体外置对象存储支持下一步三步判断看服务器、量文件、定派别。现在就做一件事先备份再把MAX_SYNC_PAYLOAD_MEGS调到 500同步一次。【免费下载链接】ankiAnki is a smart spaced repetition flashcard program项目地址: https://gitcode.com/GitHub_Trending/an/anki创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表