Функция Google Cloud - ошибка загрузки функции: файл main.py, который, как ожидается, определит функцию, не существует - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь реализовать функцию Google Cloud, основанную на коде в хранилище в стиле Git.У меня есть код, связанный с «репозиториями исходного кода» Google Cloud Platform, и моя функция работает нормально, когда я копирую и вставляю код в «встроенный редактор» функции GCP.Когда я переключаюсь на опцию «Cloud Source репозиторий», я могу сказать, что он читает из этого репозитория;Я работал над другими ошибками до этого.Однако, после решения предыдущих / других проблем, теперь я получаю эту ошибку:

Function load error: File main.py that is expected to define function doesn't exist

мои файлы имеют структуру, подобную этой, с main.py в корневом каталоге

1008 * * * * * * * * * * * * * * * * * * * * * * * * * * *

(некоторые из предыдущих ошибок произошли в результате этого процесса чтения), но почему это не чтение * main.py?Моя настройка в функции GCP выглядит следующим образом:

Google Cloud function edit window screenshot

Я попытался переместить main.py в другой каталог в проекте и установить «Каталог»с исходным кодом "в этот каталог, но это дало мне ошибку, сказав, что он не может найти этот каталог.Любые конструктивные идеи?

Редактировать / Дополнительная информация

Я использую ветку из своего репозитория, отличную от master, и использую триггер темы Google Cloud Pubsub для этой функции.

Ответы [ 3 ]

0 голосов
/ 28 мая 2019

Если вы пытаетесь загрузить свой zip-код с помощью корзины GCS или функции загрузки файла, убедитесь, что вы не заархивировали папку, содержащую ваш код, а только файлы кода.

CodeFolder
├── package
|   ├──script1.py
|   └──script2.py
├── package2
├── ...
├── main.py
└── requirements.txt

Do NOT создайте Zip-файл из CodeFolder.

Вместо этого создайте Zip-файл из main.py и requirement.txt и package.

Источник

0 голосов
/ 04 июня 2019

У меня была похожая (возможно, такая же?) Проблема.Что случилось со мной, так это то, что все мои файлы были в формате:

  1. [имя zip-файла] /main.py
  2. [имя zip-файла / [и т. Д.]

и ошибка продолжала говорить, что она не может найти main.Я догадывался, что это потому, что у него была родительская папка.Немного посмотрев на архивирование с родителем, я определил, что проблема не в этом.

Я скачал zip of и посмотрел на автоматически сгенерированный код функции облачного потока диалога и заметил, что у них есть файл "package.json".У меня вместо этого был только файл "needs.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": "",
  }
}

Я полагаю, они используют это для развертывания облачных функций Google, поэтому без него они ломаются.

0 голосов
/ 21 сентября 2018

Перераспределяете ли вы функцию после нажатия новых коммитов?Вам нужно будет сделать что-то вроде:

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.

...