【问题标题】:How to use modules replace functionality in cloud functions如何使用模块替换云功能中的功能
【发布时间】:2019-01-30 06:30:13
【问题描述】:

我有一个谷歌云功能,它是存储库中的一个子目录。它使用设置菜单中的“带有源代码的目录”选项。我在部署时不断收到此错误:

Deployment failure:
Build failed: go: parsing /utils/pubsub/go.mod: open /utils/pubsub/go.mod: no such file or directory
go: error loading module requirements

我假设 GCF 不会将整个目录上传到实例,而是只上传文件夹?这破坏了 Go 模块的替换功能。是不是我做错了什么?

回购链接:https://github.com/FreekingDean/jeffbotgo/tree/5d735cc/slackevent

【问题讨论】:

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


    【解决方案1】:

    我在 Google 工作,负责这个产品。

    仅上传您运行gcloud 的目录。除了压缩当前目录并上传之外,没有暂存步骤。

    值得注意的是,与供应商相比,构建者更喜欢模块。如果有go.mod,将使用模块。当你上传你的函数时,它只包括你的函数在根目录,而不是任何上一级的目录。所以,当有一个go.mod 并且你有一个指向上一级的替换指令时,它将不起作用。

    目前使用此布局的解决方案是供应商,而不是上传 go.mod/go.sum 文件。使用gcloud 时,您可以创建一个.gcloudignore 文件来为您执行此操作。有关更多详细信息,请参阅https://cloud.google.com/functions/docs/concepts/go-runtime#specifying_dependencies。或者,修改您的项目以在子目录中包含任何必要的帮助程序包。

    【讨论】:

    • Tyler,replace 指令是否适用于在线模块而不是本地路径?我有一个分支模块存储库,在等待合并更改时,我使用replace 指向我的分支。这在我本地构建时有效,但 Cloud Functions 构建过程不尊重它。 github.com/k0swe/forester-func/blob/…
    • 根据我自己的评论,“在线”replacements 一定不能像我想象的那样工作,因为它在我的 CI 中也不起作用。
    • 我不认为它适用于 GCF 部署。对于其他情况,当您想为同一模块指向不同的 repo 时,替换很有用,例如创建 fork 时。如果你只是有一个你想要依赖的分支而不是一个分支,你可以使用go get the.module@the.branch,它应该可以工作。
    【解决方案2】:

    我今天遇到了同样的问题。

    第 8 次阅读文档时,我在“供应商目录”标题下方遇到了一个警告框。

    警告:如果您的项目同时具有 go.mod 文件和供应商目录 在项目的根目录下,供应商目录将被忽略 在部署期间。您必须使用 .gcloudignore 文件来忽略 go.mod 文件,以确保使用您的供应商目录 在部署期间。

    所以基本上一旦我用 go.mod 添加了一个 .gcloudignore 文件(也会添加 go.sum)一切正常。所以我猜如果你有一个 go.mod 文件,云函数将尝试获取依赖项,而不是使用上传到供应商文件夹中的依赖项。 我只是猜测这里很难。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 2021-06-16
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多