转到Google应用引擎 - 无法找到模板文件

时间:2016-05-25 10:45:18

标签: google-app-engine go go-gin

我使用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
...

2 个答案:

答案 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