ใช้และตรวจสอบการเปลี่ยนแปลงสคีมาใน Fabric Apps

ใช้การเปลี่ยนแปลงเอนทิตี Rayfin กับฐานข้อมูลโดยใช้ rayfin up หรือ rayfin up db applyและตรวจสอบว่าสคีมาได้ถึงเซิร์ฟเวอร์แล้ว

การแก้ไขคลาสไม่ได้ rayfin/data/ เปลี่ยนฐานข้อมูลที่ติดตั้งเอง Rayfin จะอ่านเอนทิตีของคุณและสร้างการกําหนดค่า Data API Builder (DAB) เฉพาะเมื่อคุณกําหนดการเปลี่ยนแปลงอย่างชัดเจนเท่านั้น

ใช้ rayfin up สําหรับอัปเดตแอปพลิเคชัน

เรียกใช้npx rayfin upเมื่อใดก็ตามที่คุณต้องการปรับใช้การเปลี่ยนแปลงเอนทิตีล่าสุดไปยังแอป Fabric:

npx rayfin up

คำสั่งนี้:

  • ซิงโครไนซ์การตั้งค่ารันไทม์
  • ใช้สคีมาฐานข้อมูลที่สร้างจากตัวตกแต่งใน rayfin/data/.
  • สร้างและปรับใช้เนื้อหาแบบคงที่เมื่อ staticHosting เปิดใช้งาน

รันคําสั่งหลังจากทุกครั้งที่มีการเปลี่ยนแปลงไฟล์ใน rayfin/data/. หลังจากการปรับใช้ครั้งแรก การรันถัดไปจะอัปเดตการปรับใช้เดิมแทนที่จะสร้างใหม่

ใช้เฉพาะการเปลี่ยนแปลงโครงสร้างฐานข้อมูลเท่านั้น

ใช้ npx rayfin up db apply เมื่อคุณต้องการใช้สคีมาฐานข้อมูลโดยไม่ต้องซิงโครไนซ์การตั้งค่ารันไทม์หรือปรับใช้เนื้อหาแบบคงที่:

npx rayfin up db apply

คําสั่งย่อยขั้นสูงนี้มีประโยชน์เมื่อคุณรันส่วนหน้าด้วย npm run dev, ส่วนหลังบ้านถูกติดตั้งแล้ว และคุณต้องการวนเวียนสคีมาอย่างอิสระ

หากการเปลี่ยนแปลงอาจทําให้ข้อมูลสูญหาย เช่น การลบคอลัมน์ หรือการเปลี่ยนชื่อตาราง CLI จะบล็อกการดําเนินการและอธิบายผลกระทบที่อาจเกิดขึ้น หลังจากที่คุณตรวจสอบการดําเนินการและยอมรับการสูญเสียข้อมูล ให้นําการเปลี่ยนแปลงไป --forceใช้กับ :

npx rayfin up db apply --force

ข้อควรระวัง

ตัวเลือกนี้ --force อาจทําให้ข้อมูลสูญหายถาวรได้ ใช้มันได้หลังจากที่คุณตรวจสอบทุกการดําเนินการที่ CLI รายงานไว้แล้ว

ตรวจสอบสคีมาที่ติดตั้งแล้ว

Warning

คําสั่ง or rayfin up db apply ที่ประสบความสําเร็จrayfin upไม่ได้รับประกันว่า frontend ของคุณสามารถสอบถามเอนทิตีใหม่หรือที่เปลี่ยนแปลงได้ทันที ตรวจสอบว่าการปรับใช้มีสุขภาพดีก่อนทดสอบเอนทิตี

หลังจากมีการเปลี่ยนแปลงใด ๆ ใน rayfin/data/, ให้ตรวจสอบการปรับใช้:

npx rayfin up status

หากเอนทิตีใหม่หรือเปลี่ยนแปลงยังคงแสดงข้อผิดพลาด GraphQL หลังจากการปรับใช้มีสุขภาพดี ให้ใช้สคีมาอย่างชัดเจน แล้วทดสอบเอนทิตีอีกครั้ง:

npx rayfin up db apply

เพิ่ม --force เฉพาะเมื่อ CLI รายงานการเปลี่ยนแปลงที่อาจเป็นอันตรายและคุณยอมรับการสูญหายของข้อมูล

สําหรับสถานะการติดตั้งที่อ่านได้โดยเครื่อง ให้ใช้ผลลัพธ์ JSON:

npx rayfin up status --json

คุณสามารถใช้คําตอบ JSON ในสคริปต์ที่รอการปรับใช้ที่ดีก่อนจะตรวจสอบเพิ่มเติม

ปฏิบัติตามเวิร์กโฟลว์สคีมาทั่วไป

# 1. Edit an entity, such as rayfin/data/Todo.ts.
# 2. Apply the application changes.
npx rayfin up

# 3. Verify that the deployment is healthy.
npx rayfin up status

# 4. If the changed entity still fails, apply the schema explicitly.
npx rayfin up db apply

หากขั้นตอนที่ 4 รายงานการดําเนินการที่อาจก่อให้เกิดความเสียหาย ให้ตรวจสอบก่อนรันคําสั่งใหม่ด้วย --force.

แก้ไขปัญหาการเปลี่ยนแปลงสคีมา

GraphQL ส่งคืนข้อผิดพลาดภายในเซิร์ฟเวอร์

ตรวจสอบทุก @text() ฟิลด์ในเอนทิตีที่ได้รับผลกระทบว่ามีค่าที่ขาดหายไป max หรือไม่ ด้วย Microsoft SQL Server, @text() ไม่มีคอลัมน์ NVARCHAR(MAX) ซึ่งจะmaxป้องกันการสร้างสคีมา GraphQL

เพิ่มความยาวสูงสุดที่ชัดเจน แล้วใช้สคีมา:

@text({ max: 200 })
title!: string;
npx rayfin up db apply --force

ตรวจสอบการดําเนินการที่รายงานก่อนใช้ --force.

CLI รายงานการเปลี่ยนแปลงที่อาจทําลายล้าง

ตรวจสอบการดําเนินการที่ระบุไว้ รวมถึงคอลัมน์ที่ถูกตัดออก ประเภทที่ถูกจํากัด และตารางที่เปลี่ยนชื่อ รันคําสั่ง --force ใหม่หลังจากที่คุณยืนยันแล้วว่าการสูญหายของข้อมูลเป็นที่ยอมรับได้

การใช้สคีมาล้มเหลว

รัน npx rayfin up status, และรอให้บริการกลับมาแข็งแรงก่อนจะลองใช้ schema apply ใหม่

บริการข้อมูลไม่มีภาษาถิ่น

เมื่อ services.data.enabled เป็น true, กําหนดค่า dialect: mssql ใน rayfin/rayfin.yml.

services:
  data:
    enabled: true
    dialect: mssql

ใช้พรอมต์ AI

คัดลอกพรอมต์ต่อไปนี้ไปยัง GitHub Copilot หรือเอเจนต์โค้ดอื่นที่สามารถเข้าถึงโปรเจกต์และเทอร์มินัลของคุณ:

I just added a new field to an entity in my Rayfin project's rayfin/data/ folder. Run
`npx rayfin up` to apply the change, then run `npx rayfin up status` to confirm the
deployment is healthy. If querying the changed entity still fails after that, run
`npx rayfin up db apply` and check again. Review any potentially destructive operations with me before using `--force`.