gpt4 book ai didi

google-app-engine - Google App Engine 在运行时找不到文件

转载 作者:IT王子 更新时间:2023-10-29 02:30:41 27 4
gpt4 key购买 nike

添加 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") 返回一个空 slice ,而它返回一个包含在本地运行时到 thread.html 的路径。

最佳答案

函数runtime.Caller() 返回编译时源文件路径。应用程序未在与编译时相同的目录中运行。

应用程序运行时将当前工作目录设置为包含 app.yaml 的目录。使用此函数获取模板目录:

func getTemplatesDir() string {
return "templates"
}

关于google-app-engine - Google App Engine 在运行时找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56639506/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com