[{"data":1,"prerenderedAt":273},["ShallowReactive",2],{"notes-fix-buffett-prerender-500":3},{"id":4,"title":5,"body":6,"date":261,"description":262,"extension":263,"meta":264,"navigation":265,"path":266,"seo":267,"seoDescription":268,"seoTitle":269,"slug":270,"stem":271,"__hash__":272},"notes\u002Fnotes\u002F2026-05-06-fix-buffett-prerender-500.md","修复巴菲特模块 SSG 预渲染 500 错误",{"type":7,"value":8,"toc":251},"minimark",[9,16,20,36,46,49,52,58,65,68,144,161,165,189,192,199,225,231,234],[10,11,12],"blockquote",{},[13,14,15],"p",{},"记录时间：2026-05-06",[17,18,19],"h2",{"id":19},"问题",[13,21,22,23,27,28,31,32,35],{},"运行 ",[24,25,26],"code",{},".\u002Fdeploy.sh","（内部执行 ",[24,29,30],{},"npm run generate","）时，巴菲特模块全部 284 个页面预渲染失败，返回 ",[24,33,34],{},"[500]"," 错误，导致构建中断：",[37,38,43],"pre",{"className":39,"code":41,"language":42},[40],"language-text","[nitro]   ├─ \u002Fbuffett\u002F2005年伯克希尔股东大会 (507ms)\n  │ ├── [500]\n  │ └── Linked from \u002Fbuffett\n","text",[24,44,41],{"__ignoreMap":45},"",[13,47,48],{},"其他模块（思维模型、大道总纲、个人笔记）均正常生成。",[17,50,51],{"id":51},"原因",[13,53,54],{},[55,56,57],"strong",{},"根本原因：Markdown 文件的 slug 使用了中文字符。",[13,59,60,61,64],{},"巴菲特模块的 slug 形如 ",[24,62,63],{},"2005年伯克希尔股东大会","，URL 路径中包含非 ASCII 字符。Nuxt\u002FNitro 在 SSG 预渲染阶段处理这类 URL 时失败，返回 500。",[13,66,67],{},"对比其他正常的模块：",[69,70,71,87],"table",{},[72,73,74],"thead",{},[75,76,77,81,84],"tr",{},[78,79,80],"th",{},"模块",[78,82,83],{},"slug 示例",[78,85,86],{},"预渲染结果",[88,89,90,108,120,132],"tbody",{},[75,91,92,96,105],{},[93,94,95],"td",{},"大道总纲",[93,97,98,101,102],{},[24,99,100],{},"benfen","、",[24,103,104],{},"anquanbianji",[93,106,107],{},"正常",[75,109,110,113,118],{},[93,111,112],{},"个人笔记",[93,114,115],{},[24,116,117],{},"flutter-interview",[93,119,107],{},[75,121,122,125,130],{},[93,123,124],{},"思维模型",[93,126,127],{},[24,128,129],{},"fail-safe",[93,131,107],{},[75,133,134,137,141],{},[93,135,136],{},"巴菲特",[93,138,139],{},[24,140,63],{},[93,142,143],{},"500",[13,145,146,147,150,151,154,155,157,158,154],{},"此外，有 2 个文件的 slug 包含 ",[24,148,149],{},"--","（双连字符），如 ",[24,152,153],{},"巴菲特：2023年初学者如何投资--3 条简单的规则","。",[24,156,149],{}," 是 SQL 注释语法，触发了 Nuxt Content 的安全检查，报错 ",[24,159,160],{},"Invalid query: SQL comments are not allowed",[162,163,164],"h3",{"id":164},"排查过程中的干扰项",[166,167,168,176,182],"ul",{},[169,170,171,172,175],"li",{},"开发模式（",[24,173,174],{},"npm run dev","）下页面正常返回 200，问题仅在预渲染阶段出现。",[169,177,178,179,181],{},"Nitro 的预渲染日志只显示 ",[24,180,34],{},"，不输出具体错误信息，需要手动添加 server plugin 捕获错误。",[169,183,184,185,188],{},"即使把 ",[24,186,187],{},"[slug].vue"," 页面组件清空为空模板，500 依然存在，说明问题不在页面逻辑而在 URL 层面。",[17,190,191],{"id":191},"修复",[13,193,194,195,198],{},"使用 ",[24,196,197],{},"transliteration"," 库将 284 个文件批量处理：",[200,201,202,219],"ol",{},[169,203,204,211,212,214,215,218],{},[55,205,206,207,210],{},"frontmatter ",[24,208,209],{},"slug"," 字段","：中文转拼音（如 ",[24,213,63],{}," → ",[24,216,217],{},"2005nian-bo-ke-xi-er-gu-dong-da-hui","）",[169,220,221,224],{},[55,222,223],{},"文件名","：同步重命名为对应拉丁化名称",[13,226,227,228,230],{},"修复后 ",[24,229,30],{}," 成功预渲染 936 个路由，零错误。",[17,232,233],{"id":233},"经验",[166,235,236,239,245],{},[169,237,238],{},"Nuxt Content v3 的 SSG 预渲染对 URL 中的非 ASCII 字符支持有问题，slug 应始终使用拉丁字母。",[169,240,241,242,244],{},"slug 中避免使用 ",[24,243,149],{},"，它会被 Nuxt Content 的 SQL 层识别为注释语法并拒绝执行。",[169,246,247,248,250],{},"开发模式正常不代表生产构建正常，涉及新模块时应尽早跑一次 ",[24,249,30],{}," 验证。",{"title":45,"searchDepth":252,"depth":252,"links":253},2,[254,255,259,260],{"id":19,"depth":252,"text":19},{"id":51,"depth":252,"text":51,"children":256},[257],{"id":164,"depth":258,"text":164},3,{"id":191,"depth":252,"text":191},{"id":233,"depth":252,"text":233},"2026-05-06 00:00:00 CST","记录巴菲特模块全部页面在 npm run generate 时返回 500 的排查过程、根本原因和修复方案。","md",{},true,"\u002Fnotes\u002F2026-05-06-fix-buffett-prerender-500",{"title":5,"description":262},"Nuxt Content v3 预渲染时中文 slug 导致 500 错误的排查与修复记录。","修复巴菲特模块 SSG 预渲染 500 错误｜个人笔记","fix-buffett-prerender-500","notes\u002F2026-05-06-fix-buffett-prerender-500","NGvGD2JDdXRnBfOBaJArs6H1TL5LgoxcOGzi5ubrKks",1778061721248]