ข้ามไปยังเนื้อหา
เอราวัณACADEMYEN

ดูแลแอป

build ไม่ผ่าน ดูว่าติดตรงไหน แล้วให้เอ⁠ไอแก้

พอ build ไม่ผ่าน ระบบจะบอกสาเหตุกลับมาเป็นข้อความเดียว ไม่ได้โยน log มาให้ทั้งก้อน เอ⁠ไอที่เขียน⁠โค้ดให้คุณอ่านแล้วแก้ต่อได้เลย บทนี้พาดูว่าสาเหตุที่เจอบ่อยหน้าตาเป็นยังไง และแบบไหนที่ลองใหม่เฉย ๆ ก็ไม่หาย

ติดอยู่ตรงไหน ทีม Erawan ช่วยดูให้ฟรีสำหรับแผน Hobby ขึ้นไป

บอกเอไอให้แก้ได้เลย

พอ build ไม่ผ่าน ระบบจะส่งสาเหตุกลับไปให้เอไอที่กำลังเอาแอปขึ้น เป็นข้อความสั้น ๆ ที่บอกว่าติดตรงไหน ไม่ใช่ log ทั้งก้อน ส่วนใหญ่เอไอก็อ่านเอง แก้เอง แล้วลองใหม่เอง ถ้าเอไอหยุดรอคุณอยู่ พิมพ์แค่นี้ก็พอ

build ไม่ผ่าน อ่านสาเหตุแล้วแก้ให้หน่อย

ถ้าอยากดูสาเหตุเอง รันคำสั่งนี้ สาเหตุอยู่ในบรรทัด last error ใต้ลงมาเป็นรายการเวอร์ชันที่ผ่านมา

erawan status my-app

แอปตัวเดิมยังออนไลน์อยู่

build ที่ไม่ผ่านไม่ได้เปลี่ยนอะไรเลย ถ้าแอปเคยออนไลน์อยู่แล้ว เวอร์ชันเดิมก็ยังรับคนเข้าใช้ตามปกติระหว่างที่เอไอแก้ ที่เสียไปมีแค่เวลารอ

สาเหตุที่เจอบ่อย

log ว่างเปล่า มีแต่เลข 137

แบบนี้คือหน่วยความจำไม่พอ build โดนหยุดกลางคันก่อนจะได้พิมพ์อะไรออกมา log จึงว่าง ถ้าปล่อยไว้แบบนั้นก็ดูเหมือนไม่มีอะไรเกิดขึ้น Erawan เลยบอกเป็นคำพูดให้ว่า build ใช้หน่วยความจำจนหมดแล้วโดนหยุด (exit 137)

สั่งลองใหม่โดยไม่แก้อะไรก็จะพังแบบเดิม อัปแพ็กเกจก็ไม่ช่วย เพราะนี่เป็นเพดานของการ build ไม่ใช่ของแอป ทางแก้คือทำให้ build เบาลง เช่น ลดงานที่รันพร้อมกัน ใช้ base image ที่เล็กกว่า หรือคัดลอกไฟล์ก่อนขั้นติดตั้งให้น้อยลง บอกเอไอตามนี้ได้เลย

failed to compute cache key

ข้อความนี้อ่านแล้วเหมือนระบบของเราพัง แต่ที่จริงคือไฟล์ที่ Dockerfile สั่ง COPY ไม่ได้ติดขึ้นมาด้วย ระบบยกชื่อไฟล์นั้นขึ้นมาไว้ต้นข้อความให้แล้ว ส่วนใหญ่เป็นไฟล์ที่อยู่ใน .gitignore ซึ่งจะไม่ติดขึ้นมา ไม่ก็ path ใน COPY สะกดไม่ตรงกับชื่อไฟล์จริง

ติดตั้ง dependency ไม่ผ่าน

เวอร์ชันที่ระบุไม่มีอยู่จริง แพ็กเกจเปลี่ยนชื่อไปแล้ว หรือ lockfile สร้างมาจากคนละระบบ ระบบจะยกบรรทัดที่พังขึ้นมาก่อน ตามด้วย log ช่วงท้ายก่อนถึงบรรทัดนั้น แบบนี้ส่งให้เอไอแก้ได้เลย เพราะเอไอเป็นคนเขียนรายการ dependency เอง และอ่าน error แบบนี้ออก

build เสร็จ แต่ไม่มีไฟล์ออกมา

เจอกับเว็บไซต์ที่ต้อง build ก่อนขึ้นออนไลน์ เช่น เว็บที่ทำด้วย Vite หรือ Astro คำสั่ง npm run build จบโดยไม่มี error แต่ไม่ได้เขียนไฟล์ไว้ในโฟลเดอร์ที่ระบบไปหา คือ dist build out public หรือ .output/public ส่วนใหญ่เป็นเพราะตั้งค่าให้ build ส่งไฟล์ไปไว้ที่อื่น ให้เอไอแก้ให้ไฟล์ไปลงโฟลเดอร์ใดโฟลเดอร์หนึ่งในนี้

อิมเมจใหญ่เกินแพ็กเกจ

build ผ่านแล้ว แต่อิมเมจที่ได้ใหญ่เกินเพดานของแพ็กเกจ ระบบจะไม่เก็บไว้ และบอกขนาดที่ได้เทียบกับเพดานมาให้ ตัวการที่เจอบ่อยคือ base image ที่มีเครื่องมือมาเต็มชุดทั้งที่ใช้รุ่น slim ได้ เครื่องมือ build ที่ค้างอยู่ในอิมเมจตัวสุดท้าย และแพ็กเกจที่ลาก library ด้าน ML หรือ GPU ติดมาด้วย ให้เอไอลดขนาดอิมเมจก่อน ถ้าแอปต้องใหญ่ขนาดนั้นจริง ๆ ค่อยขยับแพ็กเกจ

ถ้า build ผ่าน ขึ้นออนไลน์ได้ แต่ใช้จริงแล้วเวอร์ชันใหม่มีปัญหา ทางกลับอยู่ในบทถัดไป

บทเรียนเอราวัณคลาวด์ทั้งหมด