theme: 启动日志暴露未登记的主题
新增主题后忘了写进 [theme] available,表现只是"设置页里找不到", 日志里没有任何痕迹。现在启动时会打: - info 主题注册表已加载 enabled=... - warn [theme] available 未登记以下主题 themes=shiroko available=... discover() 用 fs.Glob 扫内嵌 css/themes/*.css,按 slug 规则过滤掉 _scaffold.css。 示例配置补上 shiroko,文档补「部署后看不到主题」的两步排查。
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
package theme
|
||||
|
||||
import (
|
||||
"io/fs"
|
||||
"regexp"
|
||||
"strings"
|
||||
"sync"
|
||||
@@ -83,9 +84,55 @@ func build(defaultSlug, available string) ([]Theme, string, map[string]Theme) {
|
||||
logrus.WithField("theme", def).Warn("站点默认主题不可用,回退基础外观")
|
||||
def = ""
|
||||
}
|
||||
|
||||
reportRegistry(list, bySlug)
|
||||
return list, def, bySlug
|
||||
}
|
||||
|
||||
// reportRegistry 把注册表状态写进启动日志。
|
||||
// 没有这段时,主题文件已随二进制发布、却忘了在 [theme] available 登记,
|
||||
// 表现只是"设置页里找不到这个主题",从日志里完全看不出原因。
|
||||
func reportRegistry(list []Theme, bySlug map[string]Theme) {
|
||||
enabled := make([]string, 0, len(list))
|
||||
for _, t := range list {
|
||||
enabled = append(enabled, t.Slug)
|
||||
}
|
||||
logrus.WithField("enabled", strings.Join(enabled, ",")).Info("主题注册表已加载")
|
||||
|
||||
var pending []string
|
||||
for _, slug := range discover() {
|
||||
if slug == DefaultSlug {
|
||||
continue
|
||||
}
|
||||
if _, ok := bySlug[slug]; ok {
|
||||
continue
|
||||
}
|
||||
pending = append(pending, slug)
|
||||
}
|
||||
if len(pending) > 0 {
|
||||
logrus.WithFields(logrus.Fields{
|
||||
"themes": strings.Join(pending, ","),
|
||||
"available": strings.Join(append(enabled, pending...), ","),
|
||||
}).Warn("[theme] available 未登记以下主题,它们不会出现在设置页")
|
||||
}
|
||||
}
|
||||
|
||||
// discover 列出内嵌的主题 css(不符合 slug 规则的模板文件如 _scaffold.css 会被跳过)。
|
||||
func discover() []string {
|
||||
matches, err := fs.Glob(static.FS, themeCSSDir+"*.css")
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
slugs := make([]string, 0, len(matches))
|
||||
for _, m := range matches {
|
||||
slug := strings.TrimSuffix(strings.TrimPrefix(m, themeCSSDir), ".css")
|
||||
if slugRe.MatchString(slug) {
|
||||
slugs = append(slugs, slug)
|
||||
}
|
||||
}
|
||||
return slugs
|
||||
}
|
||||
|
||||
func normalize(slug string) string {
|
||||
slug = strings.ToLower(strings.TrimSpace(slug))
|
||||
if !slugRe.MatchString(slug) {
|
||||
|
||||
Reference in New Issue
Block a user