为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
森栏 2021-09-27 10:57:44
我正在 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 directorygoroutine 11 [running]:console.fileValue(0x19582f0, 0x1d, 0x0, 0x0)    console/console.go:191 +0xbdconsole.generateUnsignedHtml(0xc01043a780, 0x0, 0x0)    console/console.go:68 +0x69console.consoleHandler(0x7f180fa61830, 0xc01042f380, 0xc0105640d0)    console/console.go:58 +0x37enet/http.HandlerFunc.ServeHTTP(0x1a21210, 0x7f180fa61830, 0xc01042f380, 0xc0105640d0)    go/src/net/http/server.go:1265 +0x56net/http.(*ServeMux).ServeHTTP(0xc01048a8a0, 0x7f180fa61830, 0xc01042f380, 0xc0105640d0)    go/src/net/http/server.go:1541 +0x1b4appengine_internal.executeRequestSafely(0xc01042f380, 0xc0105640d0)    go/src/appengine_internal/api_prod.go:280 +0xb7appengine_internal.(*server).HandleRequest(0x1be76f0, 0xc010540000, 0xc0104ba000, 0xc010430b60, 0x0, 0x0)    go/src/appengine_internal/api_prod.go:214 +0x102breflect.Value.call(0x1842640, 0x1be76f0, 0x113, 0x18d1380, 0x4, 0xc010533f78, 0x3, 0x3, 0x0, 0x0, ...)    /tmp/appengine/go/src/reflect/value.go:419 +0x10fdreflect.Value.Call(0x1842640, 0x1be76f0, 0x113, 0xc010533f78, 0x3, 知道为什么会发生这种情况以及如何解决吗?
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

当您上传/部署应用程序时,应用程序文件和静态文件是分开存储的。静态文件由专门/专用服务器提供,而不是由您的前端实例提供。

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

这在应用程序配置页面的静态文件处理程序部分有详细说明。引用相关部分:

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

如果您希望某个文件既是静态文件又是应用程序文件,则有 2 个选项:

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

或(首选):

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

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


查看完整回答
反对 回复 2021-09-27
  • 1 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信