【问题标题】:Build failed: Build error details not available when deploying a Python Google Cloud Function with a local package构建失败:使用本地包部署 Python Google Cloud 函数时构建错误详细信息不可用
【发布时间】:2020-07-11 11:28:35
【问题描述】:

我有一个处理来自队列的消息的 Google Cloud 函数。当我将所有模块放在函数的根目录中时(main.pyrequirements.txt live)一切正常。如果我将模块移动到本地包中,如 here in the docs. 所示,那么当我通过使用云控制台上传 Zip 文件来部署该功能时,我会收到一条错误消息,指出 Build failed: Build error details not available 没有其他信息。

.
├── main.py
├── module_one.py
├── module_two.py
└── requirements.txt

在我上传的档案的根目录下工作得很好。

.
├── main.py
├── requirements.txt
├── local_package_one/
│   ├── __init__.py
│   └── module_one.py
└── local_package_two/
    ├── __init__.py
    └── module_two.py

赚了我Build failed: Build error details not available。在第二个配置中,我更新了所有受影响的import 语句。我最初怀疑requirements.txt 文件,因为它没有在示例中显示,但here 他们声明它应该可以正常工作。那里的示例还显示了一个以该函数命名的顶级文件夹,因此我尝试将其放在存档的根目录中,其中包含所有内容并得到相同的结果。

我改变了进口来源

from module_one import MyClass

from local_package_one.module_one import MyClass

【问题讨论】:

  • 您能否提供更多详细信息?您更新后的导入是什么样的?
  • 我编辑了帖子以阐明导入更改。
  • 如果你尝试在本地调用你的函数会发生什么?
  • 我不得不承认我不确定如何在本地运行整个 shebang。我有 PubSub 模拟器在本地运行,并且可以发布到该函数应该收听的主题。我还可以使用与main.py 相同的目录中的functions-framework --target myFunction 之类的函数框架启动我的函数,它会启动并在没有任何错误的情况下进行侦听。我正在努力将函数链接到 Pub/Sub,或者请求看起来像用 curl 模仿一个。

标签: python-3.x google-cloud-platform google-cloud-functions


【解决方案1】:

这可能是很多问题,但没有更多细节就很难说。

这种通用模式虽然有效,例如:

$ tree
.
├── local_package_one
│   ├── __init__.py
│   └── module_one.py
├── local_package_two
│   ├── __init__.py
│   └── module_two.py
├── main.py
└── requirements.txt

$ cat main.py
from local_package_one.module_one import hello
from local_package_two.module_two import world

def test(request):
    return hello + ' ' + world

$ cat local_package_one/module_one.py
hello = "hello"

$ cat local_package_two/module_two.py
world = "world"

$ gcloud functions deploy test --runtime python37 --trigger-http --allow-unauthenticated
Deploying function (may take a while - up to 2 minutes)...done.

$ curl https://<my-function>.cloudfunctions.net/test
hello world%

【讨论】:

  • 谢谢,这既有用又令人沮丧。很有帮助,因为看起来我在做正确的事情,但令人沮丧,因为我的仍然无法正常工作。我稍后会尝试您的最小示例,这样我就可以确定自己确实做对了。
  • 好的,我现在要去某个地方了。我可以像您在此处所做的那样从命令行部署该功能,但如果我从控制台部署它,它会中断。我怀疑是字符编码问题,因为从控制台发布的requirements.txt 有很多奇怪的符号,但从 CLI 发布的符号很好。当我不使用本地包但由于某种原因没有导致错误时也会发生这种情况,所以我不能 100% 确定这是原因。
  • 有趣,“控制台”是指 Cloud Shell 吗?还是在 GCF 控制台编辑器中?什么是“奇怪的符号”?如果您可以将它们包含在您的问题中,将会有兴趣查看不同的 requirements.txt 文件。这可能是一个错误。
  • 控制台是指网站console.cloud.google.com/functions,然后使用该界面上传ZIP文件。我只是试图重现它,但我仍然遇到同样的错误,但 requirements.txt 文件现在很好,所以毕竟不是这样。感谢您研究它,现在能够从 CLI 进行部署对我来说很好。如果您同意,我会将其标记为答案,因为它教会了我使用 CLI 的解决方法。
  • 听起来不错!如果再次发生,请随时联系:dustiningram@google.com
猜你喜欢
  • 2021-05-03
  • 2021-02-06
  • 2013-09-21
  • 2018-10-13
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多