0

我使用 Gin 框架。在本地开发模式下:goapp serve 一切正常。

func init() {
    route := gin.Default()
    route.LoadHTMLGlob("../*/views/**/*.html")
    ...
}

但部署后:

恐慌:html/模板:模式不匹配文件:../*/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))
...

结果:

目录:%!(EXTRA string=/base/data/home/apps/tmp-LEIYJC/_ah) OK[/base/data/home/apps/tmp-LEIYJC/_ah/exe] |

目录:[] |

哎呀。我做错了什么?

升级版:

应用程序.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
...
4

2 回答 2

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
    ...
...

改变:

应用程序.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 的父目录中

于 2016-05-26T09:52:26.030 回答
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
于 2016-05-25T20:26:46.223 回答