ฟังก์ชัน Google Cloud - ข้อผิดพลาดในการโหลดฟังก์ชัน: ไม่มีไฟล์ main.py ที่คาดว่าจะกำหนดฟังก์ชัน

ฉันกำลังพยายามใช้ฟังก์ชัน 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 อยู่ในไดเรกทอรีราก:

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

สามารถอ่านได้ดีตั้งแต่ requirements.txt (ข้อผิดพลาดก่อนหน้านี้บางส่วนมาจากกระบวนการอ่านนั้น) แต่เหตุใดจึงไม่อ่านจาก main.py การตั้งค่าของฉันในฟังก์ชัน GCP มีลักษณะดังนี้:

ภาพหน้าจอหน้าต่างแก้ไขฟังก์ชัน Google Cloud

ฉันได้ลองย้าย main.py ไปยังไดเร็กทอรีอื่นในโครงการและตั้งค่า "ไดเร็กทอรีที่มีซอร์สโค้ด" ไปยังไดเร็กทอรีนั้น แต่นั่นทำให้ฉันมีข้อผิดพลาดโดยบอกว่าไม่พบไดเร็กทอรีนั้น มีความคิดที่สร้างสรรค์บ้างไหม?

แก้ไข/ข้อมูลเพิ่มเติม

ฉันกำลังใช้สาขาจากที่เก็บของฉันที่ไม่ใช่ master และฉันกำลังใช้ทริกเกอร์หัวข้อ Google Cloud Pubsub สำหรับฟังก์ชันนี้


comment
ทุกอย่างดูถูกต้อง คุณจะปรับใช้ฟังก์ชันนี้อย่างไรหลังจากทำการเปลี่ยนแปลง?   -  person Dustin Ingram    schedule 20.09.2018
comment
ฉันกดไปที่ Bitbucket และนั่นก็ซิงค์กับ Source Repositories ของ Google ฉันตรวจสอบแล้วว่าการซิงค์เกิดขึ้นเร็วมาก (~1-2 วินาที) ฉันเพิ่งรีเฟรชหน้า Google Source Repositories เพื่อให้แน่ใจว่า... ยังคงใช้งานไม่ได้   -  person Jed    schedule 20.09.2018


คำตอบ (5)



หากคุณกำลังพยายามอัปโหลดรหัส zip โดยใช้ที่เก็บข้อมูล GCS หรือฟังก์ชันอัปโหลดไฟล์ ตรวจสอบให้แน่ใจว่าคุณไม่ได้บีบอัดโฟลเดอร์ที่มีรหัสของคุณ แต่เป็นเพียงไฟล์รหัสเท่านั้น

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

ไม่ สร้างไฟล์ ZIP จาก CodeFolder

ให้สร้างไฟล์ zip จาก main.py และ requirement.txt และ package แทน

แหล่งที่มา

person MetalloyD    schedule 28.05.2019
comment
ให้สร้างไฟล์ zip จาก main.py และrequire.txt และแพ็คเกจแทน - รุ่งโรจน์! - person Ayyappa; 16.09.2020

ฟังก์ชันคลาวด์ของคุณกำลังทำอะไรก่อนที่จะถึงฟังก์ชันจุดเริ่มต้นที่คุณกำหนดไว้หรือไม่? หากมีข้อยกเว้นที่ไม่สามารถจัดการได้เกิดขึ้น 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 นั่นเป็นเพราะว่าฟังก์ชันจุดเข้าใช้งานของคุณไม่เคยเข้าถึง ตรวจสอบโค้ดที่ทำงานก่อนที่จะกำหนดฟังก์ชันของคุณ และคุณจะพบว่ามีบางอย่างผิดปกติ

person Igor Carrasco    schedule 26.05.2020

ฉันมีปัญหาที่คล้ายกัน (อาจเหมือนกัน?) สิ่งที่เกิดขึ้นกับฉันคือไฟล์ทั้งหมดของฉันอยู่ในรูปแบบ:

  1. [ชื่อไฟล์ zip]/main.py
  2. [ชื่อไฟล์ 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": "",
  }
}

ฉันเชื่อว่าพวกเขาใช้สิ่งนี้เพื่อปรับใช้ฟังก์ชัน Google Cloud ดังนั้นหากไม่ใช้งานก็จะพัง

person Community    schedule 04.06.2019

หากแม้จะมีคำตอบอื่นแล้ว แต่คุณยังคงไม่สามารถทำงานได้ ในที่สุดฉันก็ได้กำจัดข้อผิดพลาดนี้โดยทำสิ่งต่อไปนี้:

  • ตรวจสอบให้แน่ใจว่าเส้นทางไปยังไฟล์ของคุณถูกต้อง (โดยเฉพาะไฟล์ json หากคุณโหลดข้อมูลรับรองจากไฟล์เหล่านั้น ให้ระวังเส้นทางที่เกี่ยวข้อง)
  • ตรวจสอบไฟล์ requirements.txt ของคุณ: ฉันใช้ pipreqs เพื่อสร้างมันโดยอัตโนมัติ แต่ก็มีข้อผิดพลาดบางอย่าง ("_" แทนที่จะเป็น "-" สำหรับโมดูลเช่น google-cloud-tasks เป็นต้น) ฉันขอแนะนำให้เขียนข้อกำหนด txt ด้วยตัวคุณเองตามการนำเข้าของคุณ

ฉันหวังว่านี่จะช่วยได้.

person garys    schedule 12.01.2020