Anki 同步大小限制撞墙怎么办?3 级操作把上传门槛从 100MB 提到 500MB

📅 发布时间:2026/9/15 13:44:32
Anki 同步大小限制撞墙怎么办?3 级操作把上传门槛从 100MB 提到 500MB
Anki 同步大小限制撞墙怎么办3 级操作把上传门槛从 100MB 提到 500MB【免费下载链接】ankiAnki is a smart spaced repetition flashcard program项目地址: https://gitcode.com/GitHub_Trending/an/ankiAnki 在同步大型集合时客户端或服务器会报collection exceeds size limit这就是 Anki 同步大小限制机制在拦截你。本文先定位报错产生的 2 处代码门槛再按“瘦身文件 → 自托管改环境变量 → 验证生效”的顺序给出可执行的 3 级操作并列出提高上限时最容易踩的 3 个坑。定位报错代码里有两处会拒绝你的上传先打开 rslib/src/sync/collection/upload.rs找到服务端处理器handle_received_upload。它把上传数据解压后与阈值比对超限就直接返回那条错误文案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())); }这行判断是同步服务器的“最后一道闸”不管你传得多快解压后的体积必须落在阈值内。客户端侧还有一道闸但只对 AnkiWeb 域名生效。full_upload_with_server只在 endpoint 包含ankiweb时调用check_upload_limit指向自托管地址时直接跳过本地检查。所以完整的门槛结构是客户端闸仅对 ankiweb 地址生效校验上传前的本地文件体积服务器闸任何同步服务器都执行校验解压后的数据体积阈值为环境变量的3 倍传输闸服务器在上传接口上挂的 body 上限取的是压缩后阈值超大的请求在传输层就被掐断根本到不了上面的比对代码。统计面板里的卡片数、复习趋势都来自集合库。上传门槛没过各设备看到的就是旧数据误差会随时间越拉越大。为什么集合文件越来越大上传前 Anki 已经帮你做过的瘦身先弄清自动瘦身机制才知道手动优化还剩多少空间。rslib/src/collection/mod.rs 中的before_upload会在每次全量上传前一次性清掉墓碑记录与各类待处理 USN标记 schema 变更最后执行数据库压缩storage.optimize()。这一步不删任何学习数据只是把数据库压实并写入新版本号让同步协议能判断哪些部分变了。也就是说每次同步文件都会自动减掉一部分死重剩下的体积来自存活数据和媒体。手动优化的空间集中在三点运行“检查媒体”删除未被卡片引用的图片与音频这通常是最大的减重项压缩大图、把超长文本换成外链把已学完的牌组归档别长期留在主集合里。添加笔记界面是媒体进入集合的入口。每插入一张图片、每录一段音都会成为集合文件的常驻成员同步时要整份带出去。抬高上限自托管 Anki 同步大小限制用 MAX_SYNC_PAYLOAD_MEGS 配置 阈值本身只来自一个环境变量rslib/src/sync/request/mod.rs 的取值逻辑很直白pub static MAXIMUM_SYNC_PAYLOAD_BYTES: LazyLockusize LazyLock::new(|| { env::var(MAX_SYNC_PAYLOAD_MEGS) .map(|v| v.parse().expect(invalid upload limit)) .unwrap_or(100) * 1024 * 1024 });默认 100MB解压后阈值是它的 3 倍HTTP body 上限用压缩值。阈值在进程启动时读取改完必须重启容器。镜像按官方 docs/syncserver/README.md 构建启动时多带一个参数即可不用碰源码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对应。由于客户端对非 ankiweb 地址会跳过本地检查这条链路的上限完全由你服务器的环境变量决定。验证新阈值生效✅ 先同步一个小型集合确认链路通再用接近新阈值的集合压一次最后用docker logs anki-sync-server确认没有体积相关报错。仍被拒绝时对照下一节的 3 个误区排查。避坑提高同步大小限制的 3 个误区误区一改了环境变量就够了。MAX_SYNC_PAYLOAD_MEGS只被服务器进程读取。客户端还指着 AnkiWeb 时本地那道 100MB 闸依旧生效上传会在发出前被拒误区二500MB 指解压后 500MB。解压阈值是环境变量 × 3即 1.5GB传输层 body 上限仍按压缩值算两者口径不同排查时要分清卡在哪一层误区三上限提高了就不用备份。⚠️ 动配置前先把集合文件复制一份或导出完整.apkg。自托管服务器的全部数据存放在单个 volume 里备份责任在你自己。集合体积若真到了几个 GB 量级正确的方向是把媒体与结构化数据分开传输官方同步协议正朝这个方向演进。现在就去“首选项 → 网络”确认客户端实际指向哪台服务器并检查它是否已设置MAX_SYNC_PAYLOAD_MEGS。【免费下载链接】ankiAnki is a smart spaced repetition flashcard program项目地址: https://gitcode.com/GitHub_Trending/an/anki创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考