我使用Gin框架。 在本地开发模式:goapp serve 一切正常。
func init() {
route := gin.Default()
route.LoadHTMLGlob("../*/views/**/*.html")
...
}
但是在部署之后:
恐慌:html / template:pattern匹配没有文件:
../*/views/**/*.html
行。我试试:
func init() {
route := gin.Default()
dir, _ := filepath.Abs(filepath.Dir(os.Args[0]))
route.LoadHTMLGlob(dir + "/../*/views/**/*.html")
...
}
同样的结果。
我尝试获取目录:
...
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
...
}
c.String(http.StatusOK, "Dir: ", dir)
c.String(http.StatusOK, "\nOK")
res, err := filepath.Glob(dir + "/*")
c.String(http.StatusOK, fmt.Sprintf("%v | %v\n\n", res, err))
c.String(http.StatusOK, "Dirs:")
res, err = filepath.Glob(dir + "/**/*")
c.String(http.StatusOK, fmt.Sprintf("%v | %v", res, err))
...
结果:
Dir:%!(EXTRA string = / base / data / home / apps / tmp-LEIYJC / _ah) 好的[/ base / data / home / apps / tmp-LEIYJC / _ah / exe] |
Dirs:[] |
糟糕!我做错了什么?
UPD:
的app.yaml
runtime: go
api_version: go1
handlers:
- url: /images
static_dir: ../static/images
- url: /css
static_dir: ../static/css
- url: /js
static_dir: ../static/js
- url: /fonts
static_dir: ../static/fonts
- url: /.*
script: _go_app
我将app.yaml放到子目录中,导致没有其他问题: [https://groups.google.com/forum/#!topic/google-appengine-go/dNhqV6PBqVc
文件夹结构:
app/
app.go
app.yaml
static/
...
frontend/
controllers/
UserController.go
...
models/
UserModel.go
...
views/
home/
*.html
user/
*.html
anotherfolder/
*.html
backend/
controllers/
MainController.go
...
models/
SomeModel.go
...
views/
main/
*.html
anotherfolder/
*.html
...
答案 0 :(得分:2)
我找到了下一个解决方案。
我重新安排了结构:
app/
static/
...
frontend/
views/
home/
*.html
user/
*.html
anotherfolder/
*.html
backend/
views/
main/
*.html
anotherfolder/
*.html
app.go
app.yaml
frontend/
controllers/
UserController.go
...
models/
UserModel.go
...
backend/
controllers/
MainController.go
...
models/
SomeModel.go
...
...
变化:
<强>的app.yaml 强>
runtime: go
api_version: go1
handlers:
- url: /images
static_dir: static/images
- url: /css
static_dir: static/css
- url: /js
static_dir: static/js
- url: /fonts
static_dir: static/fonts
- url: /.*
script: _go_app
这真是奇怪的ecision GAE。我无法将app.yaml放到根目录中进行应用,因为我收到了重复导入的恐慌信息。而且我无法将模板放到根目录中,因为它不在范围内,只在app.yaml的父目录下
答案 1 :(得分:1)
如果我没记错,您的所有目录都应该存在于app.yaml所在的根目录中。所以你会想要这样的东西。此外,当您希望应用程序访问静态文件目录时,需要将application_readable: true
添加到该目录定义中。请参阅下一个示例。希望这会有所帮助。
app/
app.go
app.yaml
static/
...
frontend/views/
home/
*.html
anotherfolder/
*.html
示例目录定义:
- url: /s
static_dir: s/
application_readable: true