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

我正在 Go 中开发一个 Google App Engine 项目,但在阅读文件时遇到了困难。事实上,应用程序在本地完美运行。但是,在部署时,它恐慌地告诉我没有这样的文件或目录。


这是我的 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, 

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


森栏
浏览 180回答 1
1回答

慕田峪4524236

当您上传/部署应用程序时,应用程序文件和静态文件是分开存储的。静态文件由专门/专用服务器提供,而不是由您的前端实例提供。这意味着如果您想从 Go 代码中读取一个文件,该文件不能与任何静态文件模式匹配,并且不能位于指定为静态目录的文件夹中,否则该文件将被视为静态文件并且不会部署在您的 Go 代码旁边。这在应用程序配置页面的静态文件处理程序部分有详细说明。引用相关部分:为提高效率,App Engine 将静态文件与应用程序文件分开存储和提供。静态文件在应用程序的文件系统中不可用。如果您有应用程序代码需要读取的数据文件,则该数据文件必须是应用程序文件,并且不能与静态文件模式匹配。如果您希望某个文件既是静态文件又是应用程序文件,则有 2 个选项:1) 您可以复制它,例如将它放在您的代码旁边和一个单独的文件夹(例如static)中,您可以将其标记为静态目录。或(首选):2) 指定application_readable包含/应用于文件的静态文件处理程序的选项。从文档中引用:可选的。默认情况下,静态文件处理程序中声明的文件作为静态数据上传,仅提供给最终用户,应用程序无法读取它们。如果此字段设置为 true,文件也会作为代码数据上传,以便您的应用程序可以读取它们。两次上传都根据您的代码和静态数据存储资源配额收费。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go