首页 > 解决方案 > 部署到 Google Cloud 功能:错误消息:'main'

问题描述

我将 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 兼容性。

标签: pythonpython-3.xgoogle-cloud-platformgoogle-cloud-functions

解决方案


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

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

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

您应该检查以确保您尝试打开的任何文件都包含在您的函数中。您可以try/except为此错误并记录一条消息以找出它。


推荐阅读