Google App Engine Golang没有这样的文件或目录

时间:2015-03-26 18:01:23

标签: google-app-engine go

我正在开发一个谷歌应用程序引擎项目,并坚持阅读文件。 事实上,app在本地完美运作。但是在部署时,恐慌告诉我没有这样的文件或目录。

这是我的fileValue方法:

func fileValue(path string) string {
    content, err := ioutil.ReadFile(path)
    if err != nil {
        panic(err)
    }
    return string(content)
}

我称之为:

secondPart := fileValue("./console/page/secondPart.html")

这就是我可以在开发人员控制台的日志中查看的内容:

panic: open ./console/page/firstPart.html: no such file or directory

goroutine 11 [running]:
console.fileValue(0x19582f0, 0x1d, 0x0, 0x0)
    console/console.go:191 +0xbd
console.generateUnsignedHtml(0xc01043a780, 0x0, 0x0)
    console/console.go:68 +0x69
console.consoleHandler(0x7f180fa61830, 0xc01042f380, 0xc0105640d0)
    console/console.go:58 +0x37e
net/http.HandlerFunc.ServeHTTP(0x1a21210, 0x7f180fa61830, 0xc01042f380, 0xc0105640d0)
    go/src/net/http/server.go:1265 +0x56
net/http.(*ServeMux).ServeHTTP(0xc01048a8a0, 0x7f180fa61830, 0xc01042f380, 0xc0105640d0)
    go/src/net/http/server.go:1541 +0x1b4
appengine_internal.executeRequestSafely(0xc01042f380, 0xc0105640d0)
    go/src/appengine_internal/api_prod.go:280 +0xb7
appengine_internal.(*server).HandleRequest(0x1be76f0, 0xc010540000, 0xc0104ba000, 0xc010430b60, 0x0, 0x0)
    go/src/appengine_internal/api_prod.go:214 +0x102b
reflect.Value.call(0x1842640, 0x1be76f0, 0x113, 0x18d1380, 0x4, 0xc010533f78, 0x3, 0x3, 0x0, 0x0, ...)
    /tmp/appengine/go/src/reflect/value.go:419 +0x10fd
reflect.Value.Call(0x1842640, 0x1be76f0, 0x113, 0xc010533f78, 0x3, 

知道为什么会发生这种情况以及如何解决这个问题?

提前致谢:)

1 个答案:

答案 0 :(得分:3)

上传/部署应用程序时,应用程序文件和静态文件将单独存储。静态文件由专用/专用服务器提供,而不是由前端实例提供。

这意味着如果您有一个要从Go代码中读取的文件,该文件必须与任何静态文件模式不匹配,并且不能位于指定为静态目录的文件夹中,否则该文件将被视为静态文件并且不会在Go代码旁边部署。

详情请参见Application configuration页面Static file handlers部分。引用相关部分:

  

为了提高效率,App Engine与应用程序文件分开存储和提供静态文件。应用程序的文件系统中没有静态文件。如果您有需要由应用程序代码读取的数据文件,则数据文件必须是应用程序文件,并且不能与静态文件模式匹配。

如果有一个文件要同时是静态文件和应用程序文件,则有2个选项:

1)您可以复制它,例如将它放在您的代码旁边,并放在一个单独的文件夹(例如static)中,您可以将其标记为静态目录。

或(首选):

2)指定包含/适用于该文件的静态文件处理程序的application_readable选项。引自文档:

  

可选。默认情况下,在静态文件处理程序中声明的文件作为静态数据上载,并且仅提供给最终用户,应用程序无法读取它们。如果此字段设置为true,则文件也会作为代码数据上载,以便您的应用程序可以读取它们。这两个上传都是针对您的代码和静态数据存储资源配额收取的。