所以我有一个需要更新的 Google App Engine Golang 应用程序。我的代码位于私人仓库
https://github.com/ThePiachu/TestGoPrivate
中。我的app.yaml
等都在https://github.com/ThePiachu/TestGoPrivate/tree/main/app
中,但是我的源代码也从TestGoPrivate
中的其他文件夹导入,如https://github.com/ThePiachu/TestGoPrivate/Work
。
当我运行
gcloud app deploy app.yaml cron.yaml --no-promote --project testgoprivate -v testgoprivate-2024-10-09
时,我收到如下错误:
ERROR: (gcloud.app.deploy) Error Response: [9] Cloud build 292cbe9e-04dc-470b-b054-6e625fc33e01 status: FAILURE
go: downloading go1.22.8 (linux/amd64)
go: github.com/ThePiachu/TestGoPrivate/app imports
github.com/ThePiachu/TestGoPrivate/Work: github.com/ThePiachu/TestGoPrivate/[email protected]: replacement directory ./github.com/ThePiachu/TestGoPrivate/Work does not exist
go: github.com/ThePiachu/TestGoPrivate/app imports
google.golang.org/appengine/v2: github.com/ThePiachu/TestGoPrivate/[email protected] (replaced by ./github.com/ThePiachu/TestGoPrivate/Work): reading github.com/ThePiachu/TestGoPrivate/Work/go.mod: open /layers/google.go.appengine-gomod/srv/github.com/ThePiachu/TestGoPrivate/Work/go.mod: no such file or directory
Full build logs: https://console.cloud.google.com/cloud-build/builds;region=asia-southeast1/292cbe9e-04dc-470b-b054-6e625fc33e01?project=441925606269
早些时候,我遇到了一些 GitHub 错误,所以我访问了 https://golang.org/doc/faq#git_https,创建了一个 GitHub 个人访问令牌,它是一个细粒度令牌,仅具有对代码和元数据的读取访问权限.
然后我在
_netrc
下创建了一个文件.netrc
(在Windows下读某处_netrc
应该是%HOME%
)并用一行填充它:
machine github.com login ThePiachu password github_pat_<PASSWORD>
但后来我尝试做
gcloud app deploy
,但我不断收到相同的错误。
我尝试寻找某种方法来启用终端提示,或设置用户名/密码,或执行其他任何操作,但无济于事。一年前我还没有遇到过这个问题,上次我尝试更新应用程序时,但后来发生了一些变化,我不知道如何解决这个问题...
编辑:
我的Go版本是1.22.8,我的
go.mod
在ThePiachu/TestGoPrivate/app
下。 /app
下的包裹是main
,/Work
下的包裹是Work
。
编辑2:
这是一个简化的存储库副本,它出现相同的错误 - https://github.com/ThePiachu/TestGoPrivate。我更新了
go.mod
以使用本地代码与 replace github.com/ThePiachu/TestGoPrivate/Work => ./github.com/ThePiachu/TestGoPrivate/Work
但这并没有解决问题,只是更改了它......
好吧,所以最大的问题是文件的正确放置。
过去,
/app
文件夹是 Google App Engine Go 项目的根目录 - 这就是 app.yaml
曾经所在的位置,等等。但现在看来 GAE 希望将存储库的顶层视为主文件夹。
所以我的第一个问题是尝试将
go.mod
和go.sum
放入app
。不,它去了上面的根文件夹app
。这可能足以解决存储库中的导入问题(因此 /app/main.go
从 /Work
导入),因为您仍在同一个项目中。 gcloud app deploy
不应该抱怨它。
但是如果您从不同的私人存储库导入,我认为这就是我偶然发现另一个错误的地方。我在某处看到一些博客文章给出了一个基本上看起来像这样的示例:
replace github.com/ThePiachu/TestGoPrivate/Work => ./github.com/ThePiachu/TestGoPrivate/Work
,我心想“啊,所以这个点代表 GOPATH,我只是从那里指定完整的导入路径!”。事实证明不是,点指定了 go.mod
所在的文件夹以及与之相关的内容。所以在这个例子中我会去replace github.com/ThePiachu/TestGoPrivate/Work => ./Work
。博客本身将私人存储库直接导入到另一个存储库中,从而造成混乱。
我认为可能还需要指定
GOPRIVATE inside of
go envlike
set GOPRIVATE=github.com/ThePiachu/TestGoPrivate/*`,但我不确定这是否有任何贡献,因为我这样设置在此过程的早期。
所以,是的,主要问题是正确放置文件并从那里开始。我有很多其他问题也与之同时发生,所以解决它花了一段时间......