【问题标题】:Is " finished with status: 'crash' " normal for Cloud Functions?Cloud Functions 的“完成状态:'crash'”是否正常?
【发布时间】:2020-09-11 04:51:33
【问题描述】:

我用 Python 尝试了 Google Cloud Functions,但运行它时出现问题。它说:Error: could not handle the request

我检查了日志,但没有错误,只是一条日志消息:

Function execution took 16 ms, finished with status: 'crash'

当我将功能简化为打印输出时,它可以正常工作。然后我在打印输出之前添加了raise Exception('test'),以查看异常是否会出现在 Stackdriver Errors 中,但没有,我只在日志中再次收到了 finished with status: 'crash' 消息。

这是正常行为吗?或者它是一个错误,而不是崩溃,我应该在日志中将异常视为错误?

【问题讨论】:

  • 我的经验是,我们看到了一个“崩溃”记录,没有进一步的细节。我的信念是,您在 Python 中提供了一个函数,如果该函数抛出异常,它会在堆栈的更高位置被捕获并记录为崩溃。如果您想查看异常,请在函数中放置一个 try / except 将您的代码括起来。然后,如果抛出异常,您将捕获它并自己记录(如果您选择),然后重新抛出异常。
  • 捕获所有内容是一种解决方法,谢谢,尽管根据文档它不应该是必需的,所以它一定是一个错误:“您的函数产生的未捕获异常将出现在 Stackdriver 错误报告中。” cloud.google.com/functions/docs/monitoring/error-reporting
  • 您提出了一个很好的问题。我尝试使用 JavaScript 和 Python。使用 JavaScript,我们在日志中获得跟踪并创建错误报告。使用 Python,我们得到的只是“崩溃完成”,日志中没有详细信息,也没有错误报告……任务仍在继续。
  • @Tom 你解决了这个问题吗?

标签: python google-cloud-functions


【解决方案1】:

就我而言,我使用的是这样的代码:

await Promise.all([
   Promise1,
   Promise2,
   Promise3
]);

这里 Promise2 正在将文件上传到 google 存储桶中,但我错误地将 dev-gcp.json 放在了 .gitignore 中,这在部署功能时忽略了 dev-gcp.json(google application credential)。当谷歌存储桶无法找到 dev-gcp.json 进行身份验证时,这会导致错误。 因此,请确保正确处理承诺中的任何内容,因为有些错误是意料之外的,也没有得到处理。

【讨论】:

    【解决方案2】:
    def wrapper(request):
        try:
            your_main_gcf(request)
        except Exception as e:
            print(e)
    

    另外,将“包装器”标记为要在 GCF 设置中执行的函数

    【讨论】:

      【解决方案3】:

      非常正确,正如评论中提到的那样,使用 Python 的 Google Cloud Functions 崩溃似乎有问题。该问题已报告给内部 Google Cloud Functions 工程师,评估仍在进行中。您可以监控this link 进行修复

      【讨论】:

      • 这个bug也适用于golang吗?我遇到了同样的情况。
      • 很遗憾,没有!该错误特定于 Python 运行时的问题。我认为您应该打开一个新的issue link 以进一步查看您遇到的问题。
      猜你喜欢
      • 2018-09-30
      • 2019-05-28
      • 2018-06-25
      • 2018-11-21
      • 1970-01-01
      • 2022-10-13
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多