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トピックトリガーを使用しています。
新しいコミットをプッシュした後、関数を再デプロイしていますか?あなたは次のようなことをする必要があります:
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 を参照してください。
GCSバケットまたはファイルアップロード機能を使用してコードZipをアップロードする場合は、コードを含むフォルダーではなく、コードファイルのみをZipしないでください。
CodeFolder
├── package
| ├──script1.py
| └──script2.py
├── package2
├── ...
├── main.py
└── requirements.txt
行う ない CodeFolder
からZipファイルを作成します。
代わりに、main.py
およびrequirement.txt
およびpackage
からZipファイルを作成します。
同様の問題(おそらく同じですか?)がありました。私に起こったことは、すべてのファイルが次の形式であったことです。
そして、エラーはそれがメインを見つけることができなかったと言い続けました。これは親フォルダがあったからだと思っていました。親のジップを少し調べたところ、それは問題ではないと判断しました。
私はZipをダウンロードして、自動生成されたダイアログフロークラウド関数コードを見て、「package.json」ファイルがあることに気付きました。代わりに、「requirements.txt」ファイルを用意しました。 package.jsonファイルをソースコードにコピーし、正しい内容に編集し、圧縮して、クラウド関数を正しくコンパイルしました。
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": "",
}
}
私は彼らがグーグルクラウド機能をデプロイするためにこれを使用するので、それなしでは壊れてしまうと思います。
他の回答にもかかわらず、それを機能させることがまだできない場合、私は次のようにして最終的にこのエラーを取り除きました:
これがお役に立てば幸いです。