เอกสารนี้แปลโดย AI หากมีข้อมูลที่ไม่ถูกต้อง โปรดดูเวอร์ชันภาษาอังกฤษ
ในระหว่างการพัฒนาและอัปเดตปลั๊กอินของ NocoBase โครงสร้างฐานข้อมูลหรือการตั้งค่าของปลั๊กอินอาจมีการเปลี่ยนแปลงที่ไม่เข้ากัน เพื่อให้การอัปเกรดเป็นไปอย่างราบรื่น NocoBase จึงมีกลไก Migration ที่ช่วยจัดการการเปลี่ยนแปลงเหล่านี้ผ่านการเขียนไฟล์ migration คู่มือนี้จะช่วยให้คุณเข้าใจวิธีการใช้งานและขั้นตอนการพัฒนา Migration ได้อย่างเป็นระบบครับ/ค่ะ
Migration คือสคริปต์ที่จะทำงานโดยอัตโนมัติเมื่อมีการอัปเกรดปลั๊กอิน เพื่อแก้ไขปัญหาดังต่อไปนี้ครับ/ค่ะ:
ช่วงเวลาในการทำงานของ Migration แบ่งออกเป็น 3 ประเภทครับ/ค่ะ:
| ประเภท | ช่วงเวลาที่ถูกเรียกใช้งาน | สถานการณ์การทำงาน |
|---|---|---|
beforeLoad | ก่อนการโหลดการตั้งค่าปลั๊กอินทั้งหมด | |
afterSync | หลังจากที่การตั้งค่าคอลเลกชันถูกซิงค์กับฐานข้อมูล (โครงสร้างคอลเลกชันมีการเปลี่ยนแปลงแล้ว) | |
afterLoad | หลังจากที่การตั้งค่าปลั๊กอินทั้งหมดถูกโหลด |
ไฟล์ Migration ควรอยู่ในไดเรกทอรีปลั๊กอินที่ src/server/migrations/*.ts ครับ/ค่ะ NocoBase มีคำสั่ง create-migration เพื่อช่วยสร้างไฟล์ migration ได้อย่างรวดเร็ว
พารามิเตอร์เสริม
| พารามิเตอร์ | คำอธิบาย |
|---|---|
--pkg <pkg> | ระบุชื่อแพ็กเกจปลั๊กอิน |
--on [on] | ระบุช่วงเวลาที่ทำงาน, ตัวเลือก: beforeLoad, afterSync, afterLoad |
ตัวอย่าง
เส้นทางของไฟล์ migration ที่สร้างขึ้นจะเป็นดังนี้ครับ/ค่ะ:
เนื้อหาเริ่มต้นของไฟล์:
⚠️
appVersionใช้เพื่อระบุเวอร์ชันที่การอัปเกรดนี้มุ่งเป้าไปถึงครับ/ค่ะ โดยสภาพแวดล้อมที่มีเวอร์ชันต่ำกว่าที่ระบุจะทำการรัน migration นี้
ในไฟล์ Migration คุณสามารถเข้าถึงคุณสมบัติและ API ที่ใช้งานบ่อยดังต่อไปนี้ผ่าน this เพื่อความสะดวกในการจัดการฐานข้อมูล, ปลั๊กอิน และอินสแตนซ์ของแอปพลิเคชันครับ/ค่ะ:
คุณสมบัติที่ใช้งานบ่อย
this.app
อินสแตนซ์ของแอปพลิเคชัน NocoBase ปัจจุบัน ใช้สำหรับเข้าถึงบริการส่วนกลาง, ปลั๊กอิน หรือการตั้งค่าต่างๆ ครับ/ค่ะ
this.db
อินสแตนซ์ของบริการฐานข้อมูล มีอินเทอร์เฟซสำหรับจัดการโมเดล (คอลเลกชัน) ครับ/ค่ะ
this.plugin
อินสแตนซ์ของปลั๊กอินปัจจุบัน ใช้สำหรับเข้าถึงเมธอดที่กำหนดเองของปลั๊กอินครับ/ค่ะ
this.sequelize
อินสแตนซ์ของ Sequelize สามารถใช้รัน SQL ดิบหรือดำเนินการแบบ transaction ได้โดยตรงครับ/ค่ะ
this.queryInterface
QueryInterface ของ Sequelize ซึ่งมักใช้ในการแก้ไขโครงสร้างตาราง เช่น การเพิ่มฟิลด์ หรือการลบตาราง เป็นต้นครับ/ค่ะ
ตัวอย่างการเขียน Migration
นอกเหนือจากคุณสมบัติที่ใช้งานบ่อยที่กล่าวมาข้างต้น Migration ยังมี API ที่หลากหลายให้ใช้งานอีกด้วยครับ/ค่ะ สำหรับเอกสารประกอบโดยละเอียด โปรดดูที่ Migration API
การทำงานของ Migration จะถูกเรียกใช้งานโดยคำสั่ง nocobase upgrade ครับ/ค่ะ:
เมื่อทำการอัปเกรด ระบบจะพิจารณาลำดับการทำงานตามประเภทของ Migration และ appVersion ครับ/ค่ะ
ในการพัฒนาปลั๊กอิน ขอแนะนำให้ใช้ Mock Server เพื่อทดสอบว่า migration ทำงานได้อย่างถูกต้องหรือไม่ เพื่อหลีกเลี่ยงความเสียหายต่อข้อมูลจริงครับ/ค่ะ
Tip: การใช้ Mock Server ช่วยให้คุณจำลองสถานการณ์การอัปเกรดได้อย่างรวดเร็ว และตรวจสอบลำดับการทำงานของ Migration รวมถึงการเปลี่ยนแปลงข้อมูลได้ครับ/ค่ะ
beforeLoad, afterSync หรือ afterLoad ตามวัตถุประสงค์ของการทำงาน เพื่อหลีกเลี่ยงการพึ่งพาโมดูลที่ยังไม่ได้โหลดครับ/ค่ะappVersion เพื่อระบุเวอร์ชันที่ migration นี้ใช้งานได้อย่างชัดเจน เพื่อป้องกันการทำงานซ้ำซ้อนครับ/ค่ะ