ARTICLE DETAIL

资讯详情

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

Anki 同步报错“集合超出大小限制”?三条路线找到最适合你的解法

Anki 同步报错“集合超出大小限制”?三条路线找到最适合你的解法 Anki 同步报错“集合超出大小限制”三条路线找到最适合你的解法【免费下载链接】ankiAnki is a smart spaced repetition flashcard program项目地址: https://gitcode.com/GitHub_Trending/an/ankiAnki 是一款主打间隔重复的开源记忆卡片程序很多人用它背单词、考研或学外语卡片里的图片音频攒得多了同步时就会弹出“collection exceeds size limit”——你的集合大小超出了同步服务的上限。这个限制在 100MB 左右就能碰到而解决它的办法取决于你愿不愿意动手从清理客户端到自建同步服务器再到直接改源码下面按难度从低到高一次讲清。快速选型路线适合谁耗时见效路线一把集合瘦身普通用户不想折腾环境半小时轻度超标可根治路线二自建同步服务有台空闲机器、愿意用 Docker 的人1~2 小时上限自己说了算路线三改服务端默认值会 Rust、长期维护自己服务的人半天起一劳永逸但要跟着版本升级一句话建议先在本地清一遍媒体再试不行就上自托管服务器源码改造只留给真正要长期维护服务端的人。各路线详解路线一把集合瘦身——不动环境先把体积降下来适合谁没有服务器、也不想折腾只想让同步恢复正常的普通用户。菜单“工具 → 检查媒体”扫出没被任何卡片引用的图片音频勾选删除。把明显过大的图先压一遍再导回去手机原图、4K 截图往往是最大头。检查“同步 → 上次同步时间”长期没同步的机器积压会放大传输量挑网络好的时候补一次。顺手归档已完成、不再学习的牌组别让它跟着集合一起同步。清完之后再触发一次同步观察还报不报错。怎么判断成功同步走完不再出现超限提示媒体库里没有一堆没人引用的文件。多数轻度超标的用户走到这一步就通了。路线二自建同步服务——上限自己说了算适合谁有一台家里或云上的小机器愿意装 Docker想要彻底摆脱默认限制的人。这是不需要改一行代码、却能真正抬高的路线。克隆仓库git clone https://gitcode.com/GitHub_Trending/an/anki进入docs/syncserver/按 docs/syncserver/README.md 构建镜像用--build-arg ANKI_VERSION24.11指定版本。启动容器配置用户并把限制抬到 300MB# -e MAX_SYNC_PAYLOAD_MEGS300 把集合大小上限从 100MB 调到 300MB docker run -d -e SYNC_USER1admin:admin -e MAX_SYNC_PAYLOAD_MEGS300 \ -p 8080:8080 --mount typevolume,srcanki-sync-server-data,dst/anki_data \ --name anki-sync-server anki-sync-server客户端菜单“工具 → 首选项 → 网络”把同步服务器地址改成http://你的IP:8080填刚才的用户名密码。触发同步跑通一次完整流程。怎么判断成功客户端状态栏显示“已同步”docker logs -f anki-sync-server里能看到上传请求正常返回没有报错。路线三改服务端默认值——给长期维护者的路线适合谁自己维护同步服务、会点 Rust、且不想每次启动容器都记得带环境变量的开发者。打开 rslib/src/sync/request/mod.rs找到MAXIMUM_SYNC_PAYLOAD_BYTES把unwrap_or(100)里的默认值改成你要的大小。按 docs/syncserver/ 里的流程重新构建镜像并启动。用真实集合同步一次确认新上限生效。把改动记进你的变更清单升级 Anki 版本时记得把默认值重新合进去。怎么判断成功不带任何环境变量启动容器大集合也能上传成功。需要提醒改默认值不如环境变量灵活临时想调大还得重新编译。验证与避坑先做两件事再动手备份数据客户端“文件 → 备份”导出一份 .apkg自托管用户再拷一份数据卷docker cp anki-sync-server-data:/ /path/to/backup。别拿主力集合做首测。新建一个小牌组同步一遍确认流程没问题再碰大集合。高频坑三个都踩过会心疼环境变量写错容器直接起不来。MAX_SYNC_PAYLOAD_MEGS必须是纯数字写进300MB这种带单位的值会直接 panic容器日志里能看到invalid upload limit。客户端没指向自托管服务器白忙。改了服务器限制后客户端还连着 AnkiWeb 的话限制依旧卡在官方上限报错一点不会少。升级镜像前不同步老数据回不来。2025 年 1 月之前构建的镜像数据存在容器里而不是数据卷升级前务必让至少一台设备和服务完全同步。原理深挖为什么服务器要限制单个包的大小可以这么理解同步服务器就像一个中转仓库每来一个包裹都要完整拆开验货、再重新打包发往别家设备拆开的东西都得堆在仓库的空地上。空地有限包裹不能无限大。而 Anki 的集合压缩包解压后体积大约是压缩包的 3 倍所以源码里直接把解压后的上限设为环境变量的 3 倍// rslib/src/sync/request/mod.rs解压上限 环境变量值 × 3 pub static MAXIMUM_SYNC_PAYLOAD_BYTES_UNCOMPRESSED: LazyLocku64 LazyLock::new(|| (*MAXIMUM_SYNC_PAYLOAD_BYTES * 3) as u64);也就是说默认 100MB 的压缩包解压后接近 300MB 就会被 rslib/src/sync/collection/upload.rs 里的检查拦下——这不是网络传输限制而是服务器内存保护。写在最后轻度超标先做媒体清理想要一劳永逸就上自托管服务器源码改造留给真正维护服务端的人。数据是自己的备份常做、心里不慌剩下的就是按路线一步步来。【免费下载链接】ankiAnki is a smart spaced repetition flashcard program项目地址: https://gitcode.com/GitHub_Trending/an/anki创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表