我正在尝试实现基于Git样式存储库中代码的Google Cloud功能。我已将代码链接到Google Cloud Platform的“源存储库”,并且将代码复制并粘贴到GCP函数“内联编辑器”中时,我的函数运行正常。当我切换到“ Cloud Source存储库”选项时,我可以知道它正在从该存储库中读取数据。在此之前,我曾尝试过其他错误。但是,在解决先前/其他问题之后,现在出现此错误:
Function load error: File main.py that is expected to define function doesn't exist
我的文件具有类似的结构,其中main.py
位于根目录中:
.
├── package
| ├──script1.py
| └──script2.py
├── package2
├── ...
├── main.py
└── requirements.txt
从requirements.txt
可以正常读取(某些先前的错误来自该读取过程),但是为什么不从main.py
读取呢?我在GCP功能中的设置如下所示:
我试图将main.py移至项目中的另一个目录,并将“带有源代码的目录”设置为该目录,但这给了我一个错误,提示它找不到该目录。有建设性的想法吗?
我正在使用我的存储库中除master
以外的分支,并且正在为此功能使用Google Cloud Pubsub主题触发器。
答案 0 :(得分:3)
您是否在推送新提交后重新部署该功能?您需要执行以下操作:
gcloud functions deploy NAME \
--source https://source.developers.google.com/projects/PROJECT_ID/repos/REPOSITORY_ID/moveable-aliases/master/paths/SOURCE \
TRIGGER
有关更多详细信息,请参见https://cloud.google.com/functions/docs/deploying/repo。
答案 1 :(得分:2)
您的云功能在到达您分配的入口点功能之前是否在做任何事情?如果发生任何未处理的异常,GCF将不会到达入口点函数并抛出此错误。例如:
class SomeClass:
def __init__(self):
raise ValueError
err = SomeClass()
def main(event, context):
pass
将引发相同的错误:Function load error: File main.py that is expected to define function doesn't exist
。这是因为您的切入点功能永远不会到达。在定义函数之前,请查看运行的代码,您可能会发现一些问题。
答案 2 :(得分:1)
我遇到了类似(可能相同)的问题。我发生的事情是我所有的文件都采用以下格式:
并且错误不断说找不到主目录。我猜这是因为它有一个父文件夹。在看了一下父母之后,我确定这不是问题。
我下载了zip文件,并查看了自动生成的dialogflow云功能代码,发现它们具有“ package.json”文件。相反,我只有一个“ requirements.txt”文件。我将package.json文件复制到我的源代码中,对其进行了编辑以获取正确的内容,将其压缩,然后正确编译了cloud函数。
package.json如下:
{
"name": "test",
"description": "testingThings",
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"author": "ABCDEFG",
"engines": {
"node": "8"
},
"scripts": {
"start": "firebase serve --only functions:test",
"deploy": "firebase deploy --only functions:test"
},
"dependencies": {
"google-cloud-storage": "",
"google-cloud-firestore": "",
}
}
我相信他们会使用它来部署Google云功能,因此如果没有它,它们就会崩溃。
答案 3 :(得分:0)
如果您尝试使用GCS存储桶或文件上传功能上载代码zip,请确保您不压缩包含代码而仅包含代码文件的文件夹。
CodeFolder
├── package
| ├──script1.py
| └──script2.py
├── package2
├── ...
├── main.py
└── requirements.txt
不要不要从CodeFolder
创建一个Zip文件。
相反,请从main.py
和requirement.txt
和package
创建一个zip文件。
答案 4 :(得分:0)
如果尽管有其他答案,您仍然无法使它工作,我终于可以通过执行以下操作来摆脱此错误:
我希望这会有所帮助。