4

リポジトリ内のサブディレクトリである Google クラウド機能があります。設定メニューの「ソースコードを含むディレクトリ」オプションを使用します。展開時にこのエラーが発生し続けます:

Deployment failure:
Build failed: go: parsing /utils/pubsub/go.mod: open /utils/pubsub/go.mod: no such file or directory
go: error loading module requirements

GCF はディレクトリ全体をインスタンスにアップロードするのではなく、フォルダのみをアップロードすると仮定していますか? これにより、Go モジュールの置換機能が壊れます。私が間違っていることはありますか?

リポジトリへのリンク: https://github.com/FreekingDean/jeffbotgo/tree/5d735cc/slackevent

4

2 に答える 2

4

私は Google でこの製品に取り組んでいます。

実行したディレクトリのみgcloudがアップロードされます。現在のディレクトリを圧縮してアップロードする以外に、ステージングの手順はありません。

特に、モジュールはベンダーよりもビルダーに好まれます。がある場合go.mod、モジュールが使用されます。関数をアップロードすると、関数がルートにあるディレクトリのみが含まれ、1 レベル上のディレクトリは含まれません。そのため、go.mod1 レベル上を指す replace ディレクティブがある場合、それは機能しません。

このレイアウトでの現時点での解決策は、go.mod/go.sumファイルをアップロードせずにベンダーに提供することです。を使用する場合、これを行うためのファイルをgcloud作成できます。.gcloudignore詳細については、 https://cloud.google.com/functions/docs/concepts/go-runtime#specifying_dependenciesを参照してください。または、プロジェクトを変更して、必要なヘルパー パッケージをサブディレクトリに含めます。

于 2019-01-29T22:30:13.247 に答える
1

今日も同じ問題がありました。

ドキュメントを 8 回目に読んだときに、「ベンダー ディレクトリ」の見出しの下に警告ボックスが表示されました。

警告: プロジェクトのルートに go.mod ファイルと vendor ディレクトリの両方がある場合、配置時に vendor ディレクトリは無視されます。デプロイメント中にベンダー ディレクトリが確実に使用されるようにするには、.gcloudignore ファイルを使用して go.mod ファイルを無視する必要があります。

したがって、基本的に go.mod で .gcloudignore ファイルを追加すると (go.sum も追加されます)、すべてが機能しました。したがって、go.mod ファイルがある場合、クラウド関数はベンダー フォルダーにアップロードされたものを使用する代わりに、依存関係をフェッチしようとするでしょう。ここは厳しいと思います。

于 2019-01-25T13:04:07.567 に答える