ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Glance 如何用 $include 把 glance.yml 拆分成多文件并定位行号错乱的报错?

Glance 如何用 $include 把 glance.yml 拆分成多文件并定位行号错乱的报错? Glance 如何用 $include 把 glance.yml 拆分成多文件并定位行号错乱的报错【免费下载链接】glanceA self-hosted dashboard that puts all your feeds in one place项目地址: https://gitcode.com/GitHub_Trending/gla/glance当 Glance 的配置文件glance.yml越写越长你通常会把不同页面或小组件的配置拆到独立文件里用$include指令从主配置引入。这样做会遇到一个典型的坑拆分后一旦出现 YAML 解析错误报错给出的行号往往不是错的真正位置因为 Glance 是在解析 YAML 之前就把 include 的文件内容合并进主配置的。本文按 docs/configuration.md 中 Including other config files 一节给出的方法演示如何完成拆分、如何确认拆分生效以及在行号错乱时如何用config:print命令定位真实出错位置。用 $include 把配置拆成多个文件$include后面跟相对路径或绝对路径相对路径是相对于主配置文件所在目录解析的。include 的文件里同样可以使用${ENV_VAR}环境变量语法对 include 文件的修改也会触发热加载这一点和修改主配置文件的效果一致。把每个页面的配置拆成独立文件时写法是pages: - $include: home.yml - $include: videos.yml - $include: homelab.yml更常见的是把单个 widget 拆出去例如文档示例中的glance.ymlpages: - name: Home columns: - size: full widgets: - $include: rss.yml - name: News columns: - size: full widgets: - type: group widgets: - $include: rss.yml - type: reddit subreddit: news被引入的rss.yml有两个硬性要求文件内不能有多余缩进值要写在顶层缩进会由 Glance 根据 include 所在位置自动补上$include指令必须独占一行并带有正确的缩进。对应的rss.yml内容值位于顶层- type: rss title: News feeds: - url: ${RSS_URL}$include并不限于pages属性配置文件的任何位置都可以使用只要满足上面独占一行、缩进正确两个条件。确认拆分后的配置已生效Glance 支持自动重载配置保存后无需重启容器或服务。判断新配置是否被接受可以看两种现象见 docs/configuration.md 的 Auto reload 一节如果启动时配置就无效Glance 会直接报错退出如果启动成功后再修改出错误错误会打印在控制台Glance 会继续用旧配置运行直到修改到没有错误时才加载新配置。所以拆文件改完保存后观察控制台没有新错误输出说明含$include的新配置已被解析并接受如果看到解析错误就进入下一步定位。行号错乱时用 config:print 定位报错当报错行号对不上你打开的那个文件时不要直接按行号改。先理解原因include 是在 YAML 解析之前做的文本级合并YAML 本身不支持文件引用所以报错行号对应的是合并后的大文件而不是你编辑的子文件。Glance 为此提供了config:print命令用于打印 include 全部解析后的完整配置配合less -N显示行号glance --config /path/to/glance.yml config:print | less -N/path/to/glance.yml换成你的主配置文件路径。该命令对应 cli.go 中列出的config:print Print the parsed config file with embedded includes实现见 main.go。如果你的 Glance 跑在 Docker 容器里文档给出的是这条等价命令docker run --rm -v ./glance.yml:/app/config/glance.yml glanceapp/glance config:print | less -N注意它的前提要打印的配置必须位于当前工作目录且文件名就叫glance.yml否则需要相应调整挂载路径。该命令以一次性容器运行--rm结束即清理不会改动你现有容器的数据。按输出核对出错位置config:print | less -N的输出是 include 已经展开、并带行号的完整配置也就是 Glance 实际拿去解析的那份内容。定位步骤拿控制台报错里的行号在less -N输出中找到同一行号该行列出的就是合并后的实际内容据此判断问题出在主文件还是某个被引入的文件里修正对应文件保存控制台不再报新错即表示新配置已加载。如果config:print本身就输出Could not parse config file: ...说明连 include 展开这一步都没成功比如路径写错、文件读不到此时先修路径问题再重新执行上面的命令。限制与边界被引入文件的值必须写在顶层多余的缩进不会被自动纠正相对路径相对于主配置文件解析不是相对于当前工作目录在 Docker 场景下尤其容易写错include 支持递归引入源码中设置了递归深度上限CONFIG_INCLUDE_RECURSION_DEPTH_LIMIT 20见 config.go超过会报recursion depth limit of 20 reached修改环境变量不会触发自动重载需要手动重启重载配置会清空缓存数据频繁改动配置可能触发某些 API 的限流这是文档明确标注的代价。【免费下载链接】glanceA self-hosted dashboard that puts all your feeds in one place项目地址: https://gitcode.com/GitHub_Trending/gla/glance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进