Я пытаюсь реализовать функцию Google Cloud, основанную на коде в репозитории стиля Git. У меня есть код, связанный с Google Cloud Platform "Исходные репозитории", и моя функция работает нормально, когда я копирую и вставляю код в функцию GCP "Встроенный редактор". Когда я переключаюсь в "Репозиторий облачного источника", я могу сказать, что он читает из этого репозитория; Я работал с другими ошибками до этого. Однако, после решения предыдущих/других вопросов, теперь я получаю эту ошибку:
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
Он отлично читает main.py
requirements.txt
(некоторые из предыдущих ошибок были main.py
из этого процесса чтения), но почему это не чтение из main.py
? Моя настройка в функции GCP выглядит так:
Я попытался переместить main.py в другой каталог проекта и установить "Каталог с исходным кодом" в этот каталог, но это дало мне ошибку, говоря, что он не смог найти этот каталог. Любые конструктивные идеи?
Я использую ветку из моего репозитория, отличного от master
, и я использую триггер темы Cloud Cloud для Google для этой функции.
Вы перераспределяете функцию после нажатия новых коммитов? Вам нужно будет сделать что-то вроде:
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.
main.py
в папку PACKAGE
, а затем использование следующей команды работало, в то время как другие опции не gcloud functions deploy NAME --source https://source.developers.google.com/projects/PROJECT_ID/repos/REPOSITORY_ID/moveable-aliases/BRANCH_NAME/paths/PACKAGE/ --trigger-topic TOPIC
: gcloud functions deploy NAME --source https://source.developers.google.com/projects/PROJECT_ID/repos/REPOSITORY_ID/moveable-aliases/BRANCH_NAME/paths/PACKAGE/ --trigger-topic TOPIC
У меня была похожая (возможно, такая же?) Проблема. Что случилось со мной, так это то, что все мои файлы были в формате:
и ошибка продолжала говорить, что она не может найти главное. Я догадывался, что это потому, что у него была родительская папка. Посмотрев немного на молнию в родителе, я решил, что это не проблема.
Я скачал 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, поэтому без них они ломаются.
Если вы пытаетесь загрузить свой zip-код с помощью корзины GCS или функции загрузки файлов, убедитесь, что вы не заархивировали папку, содержащую ваш код, а только файлы кода.
CodeFolder
├── package
| ├──script1.py
| └──script2.py
├── package2
├── ...
├── main.py
└── requirements.txt
НЕ создавайте Zip файл из CodeFolder
.
Вместо этого создайте почтовый файл из main.py
и requirement.txt
и package
.