添加 go.mod 文件后,我无法从 App Engine 上的 golang 访问 HTML 模板文件。一切都在本地进行。
我已使用 Stackdriver Debug 验证 App Engine 上是否存在 HTML 文件,但运行时看不到它们。这是我的代码。
var templates map[string]*htmltpl.Template
func init() {
if templates == nil {
templates = make(map[string]*htmltpl.Template)
}
templatesDir := getTemplatesDir()
layouts, err := filepath.Glob(templatesDir + "/layouts/*.html")
if err != nil {
panic(err)
}
includes, err := filepath.Glob(templatesDir + "/includes/*.html")
if err != nil {
panic(err)
}
// Generate our templates map from our layouts/ and includes/ directories
for _, layout := range layouts {
files := append(includes, layout)
templates[filepath.Base(layout)] = htmltpl.Must(htmltpl.ParseFiles(files...))
}
}
func getTemplatesDir() string {
_, filename, _, ok := runtime.Caller(1)
if !ok {
panic("Could not get filename")
}
dirpath := path.Join(path.Dir(filename), "../../templates")
return dirpath
}
这是我的app.yaml:
runtime: go111
main: ./main
handlers:
- url: .*
script: auto
secure: always
这是我的目录结构:
.
├── app.yaml
├── db/
├── go.mod
├── go.sum
├── handlers/
├── main
│ └── main.go
├── middleware/
├── models/
├── static/
├── templates/
│ ├── includes
│ │ ├── base.html
│ │ ├── button.html
│ │ ├── message.html
│ │ └── profile.html
│ └── layouts
│ └── thread.html
└── utils
└── template
└── template.go
我不明白为什么在 App Engine 上,调用filepath.Glob(templatesDir + "/layouts/*.html")返回一个空切片,而它返回一个包含本地运行时的路径的切片thread.html。
鸿蒙传说
相关分类