gpt4 book ai didi

go - 使用Go 1.13在Google Cloud Function上进行“No such file or directory”

转载 作者:行者123 更新时间:2023-12-01 21:09:32 25 4
gpt4 key购买 nike

我有一个用Go编写的Google Cloud Function,并使用Go 1.11运行时进行了部署,并且可以运行。将运行时升级到Go 1.13,具有相同功能时出现问题,并且出现此错误:

Error: could not handle the request
并且在Cloud Function的日志中,我具有这些错误的详细信息:
Function execution started
open ./progress.html: no such file or directory
Function execution took 232 ms, finished with status: 'connection error'
该文件位于与Go文件相同的文件夹中。
这是该函数的相关代码:
// Progress ... Entrypoint of our Cloud Function
func Progress(w http.ResponseWriter, r *http.Request) {

...

tpl, err := template.ParseFiles("progress.html")
if err != nil {
log.Fatalln(err)
}

buf := new(bytes.Buffer)

err = tpl.Execute(buf, data)
if err != nil {
log.Fatalln(err)
}
...
}
如果有帮助,请使用此函数的 here is the repository
唯一更改的是用于部署它的Go运行时,从1.11到1.13。
这是用于部署它的两个命令:
有用:
gcloud functions deploy progress --runtime go111 --entry-point Progress --trigger-http --memory 128MB
它不起作用(成功部署,但是使用该功能时出现错误):
gcloud functions deploy progress --runtime go113 --entry-point Progress --trigger-http --memory 128MB

最佳答案

错误是假设使用不同运行时的Google Cloud Functions实现相同,但是在调试时我发现了一些区别。
这是一个调试功能的测试功能:

func Progress(w http.ResponseWriter, r *http.Request) {
wd, _ := os.Getwd()
fmt.Fprintf(w, "$> pwd\n%s\n\n", wd)

bytes, _ = exec.Command("ls", "-l").CombinedOutput()
fmt.Fprintf(w, "$> ls -l\n%s\n\n", bytes)
}
这是使用Go 1.11运行时的输出:
$> pwd
/srv/files/

$> ls -l
total 5
-rw-r--r-- 1 root root 1068 Aug 13 04:15 LICENSE
-rw-r--r-- 1 root root 1097 Aug 13 04:15 README.md
drwxr-xr-x 2 root root 0 Aug 13 04:15 colors-example
-rw-r--r-- 1 root root 2093 Aug 13 04:15 progress.go
-rw-r--r-- 1 root root 627 Aug 13 04:15 progress.html
如您所见,所有文件都在当前目录中,包括缺少的文件 progress.html
但是这是使用Go 1.13运行时的输出:
$> pwd
/srv

$> ls -l
total 0
drwxr-xr-x 2 www-data www-data 0 Jan 1 1980 pkg
drwxr-xr-x 2 www-data www-data 0 Jan 1 1980 src
请注意,文件不再存在,因此我打印了 src的内容,并包含一个名为 progress的文件夹(我的项目名称)。
在那个文件夹里,有我所有的文件。
因此,使用Go 1.13运行时的解决方法是:
// Progress ... Entrypoint of our Cloud Function
func Progress(w http.ResponseWriter, r *http.Request) {

...

tpl, err := template.ParseFiles("src/progress/progress.html")
if err != nil {
log.Fatalln(err)
}

buf := new(bytes.Buffer)

err = tpl.Execute(buf, data)
if err != nil {
log.Fatalln(err)
}
...
}
我希望它不仅对答案有帮助,而且如果规则对于新的运行时有所更改,您也可以对其进行调试并找到文件的正确位置。

关于go - 使用Go 1.13在Google Cloud Function上进行“No such file or directory”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63385920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com