【问题标题】:How can I use a local repository in the vendor in Google Cloud Functions with Go如何在 Google Cloud Functions with Go 中使用供应商的本地存储库
【发布时间】:2020-05-27 18:09:40
【问题描述】:

我正在尝试部署一个用 Go 编写的 Google Cloud Function。

通过一些研究,我发现供应商文件比 go.mod 更受青睐,所以我出售我使用的所有东西(包括一些本地依赖项)并忽略 .gcloudignore 文件中的 go.mod/sum 文件。

问题是尝试部署后,出现如下错误:

go: nimbus@v0.0.0-00010101000000-000000000000: parsing /nimbus/go.mod: open /nimbus/go.mod: no such file or directory; Error ID: 03a1e2f7

nimbus 是我的本地依赖,它具有以下结构:

我的函数库具有以下结构:

我的 go.mod 文件是:

module my_function

go 1.13

require nimbus v0.0.0-00010101000000-000000000000

replace nimbus => ../../../nimbus

我已经尝试过这个解决方案https://stackoverflow.com/questions/5441096。但它并没有解决我的问题。

我已经尝试了一切来解决这个问题,但似乎没有任何效果。

【问题讨论】:

  • 您的 nimbus 依赖项是否特定于 Cloud Function 的项目?

标签: go google-cloud-functions go-modules


【解决方案1】:

如果你有一个 go.mod 文件和一个供应商目录,当你部署你的函数时,供应商目录将被忽略。

https://cloud.google.com/functions/docs/writing/specifying-dependencies-go

我在 Go 中部署 GCP 功能时使用了模块。没有遇到任何问题。但我不能说使用 vendor/ 的偏好。它应该可以工作,只是没有 go.mod 文件。

【讨论】:

  • 冷启动是主要原因。加载依赖项,而不是在本地加载它们会使您的冷启动时间更长(在某些情况下,取决于依赖项,会更长)。
  • 另外,如问题中所述并显示在项目结构的图片中,.gcloudignore 文件应该忽略 go.mod 和 go.sum 文件,这样做只考虑供应商文件
【解决方案2】:

原来问题很复杂,希望谷歌能找到解决办法。

通过使用 Cloud Build 部署我的函数,它会从我在 Google Source 上的存储库中读取,但是,通过从那里读取它会绕过 .gcloudignore 文件并使用我的部署 go.mod/sum 文件和供应商目录本地代码。

https://stackoverflow.com/a/62050872/10316247中所说:

如果你有一个 go.mod 文件和一个 vendor 目录,那么在你部署你的函数时会忽略 vendor 目录。

所以会因为我的 go.mod 找不到本地存储库而发生错误。

我的解决方案是重命名我的 go.mod/sum 文件,这样它就不会被考虑:

【讨论】:

    猜你喜欢
    • 2019-06-12
    • 1970-01-01
    • 2021-04-18
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多