【问题标题】:Deploying to Google Cloud Function: Error message: 'main'部署到 Google Cloud 功能:错误消息:'main'
【发布时间】:2019-12-28 15:56:58
【问题描述】:

我将 Python 应用程序部署到 Google Cloud Functions 并收到这条非常模糊的错误消息:

$ gcloud functions deploy parking_photo --runtime python37  --trigger-http
Deploying function (may take a while - up to 2 minutes)...failed.                   
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function failed on loading user code. Error message: 'main'

我不知道出了什么问题。四处寻找没有结果。有人可以帮忙吗?

我相信我的代码布局是正确的:

$ tree
.
├── main.py
├── poetry.lock
├── pyproject.toml
├── README.rst
├── requirements.txt
└── tests
    ├── __init__.py
    └── test_burrowingowl.py

我的main.py 文件有一个与函数名匹配的函数:

import operator
from datetime import datetime

import logbook
from flask import Request, abort, redirect
from pydantic import ValidationError
from pydantic.dataclasses import dataclass
from google.cloud import storage
from pytz import timezone


logger = logbook.Logger(__name__)
storage_client = storage.Client()


@dataclass
class Form:
    bucket: str = ...
    parkinglot: str = ...
    space_id: int = ...
    tz: str = ...


def parking_photo(request: Request):
    # Some code
    return

更新

感谢您的回答。当我有一段时间没有收到来自 StackOverflow 的通知时,这个话题不在我的视线范围内。

去年,我通过放弃使用 dataclass 来修复它。当时谷歌声称支持 Python 3.7 但实际上不支持,这就是为什么dataclass 不起作用。

当您尝试重现此问题时,可能 Google 已经修复了 Python 3.7 兼容性。

【问题讨论】:

  • 无法复制。你能分享你的 requirements.txt 文件吗?

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


【解决方案1】:

我试图通过部署一个新的云函数来重现您所描述的错误,该函数没有任何具有 CF 名称的函数,但我收到了以下错误: 错误: (gcloud.functions.deploy) OperationError: code=3, message=Function failed on loading user code。错误信息:文件 main.py 应该包含一个名为 function-test 的函数

我认为是类似的,因为错误代码是相同的。我的函数部署时出错,后来我通过 Cloud Console 编辑了名称,然后我得到了正确的部署。

我建议验证要在 Cloud Console 中调用的函数并验证其设置是否正确。

另一种方法是使用--entry_point 参数指示要执行的函数的名称。

【讨论】:

  • --entry-point 当代码中的函数名与云函数名不同时需要。不是这样的
【解决方案2】:

您的函数很可能引发了 FileNotFound 错误,而 Cloud Functions 将此解释为 main.py 不存在。将导致相同错误的最小示例:

$ cat main.py
with open('missing.file'):
    pass

def test(request):
    return 'Hello World!'

您应该检查以确保您尝试打开的所有文件都包含在您的函数中。您可以try/except 处理此错误并记录消息以解决此问题。

【讨论】:

  • 同理,如果您的函数在导入时引发 AttributeError,Cloud Functions 部署将假定您的入口点丢失,即使原因无关。
【解决方案3】:

我想扩展达斯汀的回答: 初始化函数时发生的任何错误都会发生类似的错误。

OperationError: code=3, message=Function failed on loading user code. Error message: File main.py is expected to contain a function named function-test

下面的 sn -p 可以重现这个错误。原来在一些额外的初始化代码中有一个异常。因此,应该部署的功能永远都达不到。

def init_something():
    raise NameError('Ooops, something went wrong')


init_something()


def function_to_deploy():
    return 'Hello World', 200

确保在初始化代码中处理异常。

【讨论】:

    猜你喜欢
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    相关资源
    最近更新 更多