แก้ไขปัญหาแอป Fabric

วินิจฉัยปัญหาทั่วไปเมื่อคุณพัฒนาหรือปรับใช้โครงการ Fabric Apps บทความนี้กล่าวถึงปัญหาเกี่ยวกับการลงชื่อเข้าใช้ บริการภายในเครื่อง การเปลี่ยนแปลง Schema การโฮสต์แบบคงที่ และ CLI

ปัญหาการปรับใช้

การปรับใช้ล้มเหลวด้วยข้อผิดพลาด 401 หรือ 403

อาการ: การเรียกใช้ npx rayfin up จะส่งกลับข้อผิดพลาดในการรับรองความถูกต้อง

สาเหตุ: เซสชันการตรวจสอบสิทธิ์ของคุณหมดอายุหรือคุณไม่ได้ลงชื่อเข้าใช้

วิธีการแก้:

รับรองความถูกต้องอีกครั้งและลองปรับใช้อีกครั้ง:

npx rayfin login
npx rayfin up

การปรับใช้แบบคงที่เกินขีดจํากัดขนาด

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

สาเหตุ: ไฟล์เก็บถาวรที่บีบอัดเกิน 100 MB

วิธีการแก้:

ลดขนาดเอาต์พุตบิลด์โดย:

  • การยกเว้นแผนที่ต้นทางจากบิลด์ที่ใช้งานจริง
  • การเพิ่มประสิทธิภาพหรือการลบรูปภาพและวิดีโอขนาดใหญ่
  • การย้ายไฟล์ไบนารีไปยังที่เก็บข้อมูลแทนการรวมกลุ่ม
  • การตรวจสอบการกําหนดค่าบันเดิลของคุณไม่รวมสิ่งประดิษฐ์การพัฒนา

การปรับใช้แบบคงที่ไม่มีจุดสิ้นสุดระยะไกล

อาการ: กําลังรัน npx rayfin up staticapp deploy รายงานว่าไม่มีการตั้งค่าปลายทางระยะไกล

สาเหตุ:การปรับใช้แบบคงที่เท่านั้นจะอัปเดตการปรับใช้ที่มีอยู่ มันไม่สามารถจัดเตรียมแอประยะไกลเริ่มต้นได้

วิธีการแก้:

รันการปรับใช้เต็มรูปแบบครั้งเดียว:

npx rayfin up

หลังจากการจัดเตรียมเสร็จสิ้น ให้ใช้ npx rayfin up staticapp deploy สําหรับการอัปเดตแบบคงที่เท่านั้นในภายหลัง

ปัญหาการรับรองความถูกต้อง

การได้มาของโทเค็นการตรวจสอบสิทธิ์ล้มเหลว

อาการ:npx rayfin login หรือรายงาน Failed to acquire authentication token คําสั่ง CLI ที่ผ่านการตรวจสอบสิทธิ์อื่น ๆ หรือข้อผิดพลาดในการจัดเก็บข้อมูลรับรอง

สาเหตุ: CLI ไม่ได้ลงชื่อเข้าใช้ หรือสภาพแวดล้อมไม่ได้จัดเตรียมที่เก็บข้อมูลรับรองที่รองรับระบบปฏิบัติการ

วิธีการแก้:

เข้าสู่ระบบอีกครั้ง:

npx rayfin login

สําหรับสภาพแวดล้อมการพัฒนาแบบโลคอลที่มีข้อจํากัดโดยไม่มีที่เก็บข้อมูลรับรอง คุณสามารถเปิดใช้งานการสํารองการเข้ารหัสได้:

npx rayfin login --encryption-fallback-enabled

Warning

การสํารองการเข้ารหัสจะเก็บแคชโทเค็นในรูปแบบข้อความธรรมดา ใช้เฉพาะในสภาพแวดล้อมการพัฒนาที่เชื่อถือได้เท่านั้น อย่าใช้ในสภาพแวดล้อมที่ใช้งานจริงหรือใช้ร่วมกัน

เซสชันไม่คงอยู่หลังจากลงชื่อเข้าใช้

อาการ: ผู้ใช้จะออกจากระบบทันทีหลังจากการรับรองความถูกต้อง

สาเหตุ: ไคลเอ็นต์ไม่ได้กําหนดค่าด้วย URL พื้นฐานหรือคีย์ที่เผยแพร่ได้ที่ถูกต้อง

วิธีการแก้:

ตรวจสอบว่า RayfinClient การกําหนดค่าตรงกับแบ็กเอนด์ของคุณ:

const client = new RayfinClient({
  baseUrl: import.meta.env.VITE_RAYFIN_API_URL ?? 'http://localhost:5168',
  publishableKey: import.meta.env.VITE_RAYFIN_PUBLISHABLE_KEY,
});

ป๊อปอัป Fabric SSO ถูกบล็อก

อาการ: เบราว์เซอร์บล็อกหน้าต่างพอร์ทัล Fabric ในระหว่างการลงชื่อเข้าใช้

สาเหตุ:ensureSignedInWithFabric() ไม่ได้ถูกเรียกจากตัวจัดการท่าทางผู้ใช้

วิธีการแก้:

เรียกใช้ฟังก์ชันจากตัวจัดการเหตุการณ์แบบซิงโครนัส:

async function handleClick() {
  await ensureSignedInWithFabric(client.auth, options);
}

// Attach to button click
<button onClick={handleClick}>Sign in</button>

การตรวจสอบสิทธิ์ Fabric หมดเวลา

อาการ: การตรวจสอบสิทธิ์ Fabric ล้มเหลวหลังจากห้านาที

สาเหตุ:พอร์ทัล Fabric ไม่ส่งรหัสโอนย้ายกลับก่อนที่โฟลว์จะหมดอายุ

วิธีการแก้:

ยืนยันว่า returnOrigin ตรงกับต้นทางของแอปคุณ ปิดป๊อปอัพ และเริ่มกระบวนการลงชื่อเข้าใช้อีกครั้ง

Fabric SSO รายงานความไม่ตรงกันของแหล่งกําเนิด

อาการ:การส่งต่อ Fabric SSO ปฏิเสธการตอบสนองเนื่องจากต้นทางไม่ตรงกัน

สาเหตุ:returnOrigin, allowedRedirectUris, หรือไม่fabricPortalUrlตรงกับสภาพแวดล้อมที่แอปและพอร์ทัล Fabric กําลังทํางานอยู่

วิธีการแก้:

  1. ตั้งค่า returnOrigin เป็นต้นกําเนิดเปล่าของแอปคุณ
  2. ยืนยันว่าจุดกําเนิดปรากฏใน services.auth.allowedRedirectUris.
  3. ใช้ URL ของพอร์ทัล Fabric สําหรับสภาพแวดล้อมการผลิต ตัวอย่าง หรือการพัฒนาที่ถูกต้อง
  4. รัน npx rayfin up หลังจากเปลี่ยน rayfin.yml.

สําหรับข้อมูลเพิ่มเติม ดูที่ กําหนดค่า URI สําหรับการเปลี่ยนเส้นทางการตรวจสอบสิทธิ์

initEmbeddedAuth() การคืนสินค้า null

อาการ: การตรวจสอบสิทธิ์แบบฝังตัวไม่ได้สร้างเซสชัน

สาเหตุ:SDK ไม่ตรวจพบว่าแอปกําลังทํางานอยู่ภายใน Fabric

วิธีการแก้:

รวม ?fabricEmbedded=true ใน URL แอป หรือตั้งค่า fabricEmbedded: true ใน FabricAuthOptions.

การตรวจสอบสิทธิ์ Fabric รายงานความไม่ตรงกันของสถานะ

อาการ: การลงชื่อเข้าใช้ล้มเหลวเนื่องจากสถานะการตอบกลับไม่ตรงกับสถานะคําขอ

สาเหตุ: การตอบกลับเป็นของโฟลว์ที่หมดอายุหรือความพยายามเข้าสู่ระบบก่อนหน้านี้

วิธีการแก้:

ปิดป๊อปอัพ Fabric แล้วเริ่มกระบวนการลงชื่อเข้าใช้ใหม่ อย่านํา URL callback หรือค่าสถานะจากความพยายามก่อนหน้ากลับมาใช้ซ้ํา

ปัญหาแบบจําลองข้อมูล

Data API ส่งคืนข้อผิดพลาดภายในเซิร์ฟเวอร์หลังจากการปรับใช้

อาการ:npx rayfin up หรือ npx rayfin up db apply สําเร็จ แต่ API ข้อมูล GraphQL หรือ REST ส่งคืนข้อผิดพลาดภายในเซิร์ฟเวอร์

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

วิธีการแก้:

เพิ่มความยาวสูงสุดที่ระบุไว้สําหรับแต่ละช่องข้อความที่ได้รับผลกระทบ:

@text({ max: 200 })
title!: string;

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

npx rayfin up db apply --force

ข้อควรระวัง

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

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

อาการ: การปรับใช้ล้มเหลวเมื่อมีการตอบกลับ HTTP 400 และรายงาน Dialect is required when Data module is enabled.

สาเหตุ:services.data.enabled เป็น trueแต่ rayfin.yml ไม่ได้กําหนดสําเนียงถิ่น

วิธีการแก้:

กําหนดค่า Microsoft SQL Server:

services:
  data:
    enabled: true
    dialect: mssql

เอนทิตีใหม่ไม่พร้อมใช้งานหลังจากการปรับใช้

อาการ: การปรับใช้สําเร็จ แต่การสืบค้นกับเอนทิตีใหม่หรือที่เปลี่ยนแปลงล้มเหลวหรือแสดงพฤติกรรมเหมือนไม่มีเอนทิตีนั้น

สาเหตุ: สคีมาฐานข้อมูลอาจยังคงใช้งานอยู่ หรือส่วนหน้าอาจใช้ประเภทข้อมูลที่สร้างโดยระบบเก่าหรือการตั้งค่าที่แคชไว้

วิธีการแก้:

  1. ตรวจสอบการปรับใช้:

    npx rayfin up status
    
  2. รอจนกว่าการส่งงานจะสมบูรณ์

  3. รีเฟรชหรือสร้างส่วนหน้าใหม่.

  4. หากเอนทิตียังล้มเหลว ให้ใช้สคีมาอย่างชัดเจน:

    npx rayfin up db apply
    

สําหรับเวิร์กโฟลว์ทั้งหมด ดูที่ การใช้และตรวจสอบการเปลี่ยนแปลงสคีมา

ความสัมพันธ์ไม่ปรากฏใน API

อาการ: ฟิลด์เอนทิตีที่เกี่ยวข้องไม่พร้อมใช้งานเมื่อสอบถาม

สาเหตุ: ตัวตกแต่งการนําทางหายไปหรือไม่ได้ใช้ Schema

วิธีการแก้:

  1. ตรวจสอบว่ามีตัวตกแต่งความสัมพันธ์:

    @one(() => Notebook) notebook?: Notebook;
    
  2. นําสคีมาไปใช้อีกครั้ง

นโยบายการให้สิทธิ์ไม่ทํางาน

อาการ: ผู้ใช้สามารถเข้าถึงระเบียนที่ไม่ควรเห็นได้

สาเหตุ: นิพจน์นโยบายไม่ถูกต้องหรือชื่อการอ้างสิทธิ์ไม่ตรงกัน

วิธีการแก้:

  1. ยืนยันว่านโยบายใช้ชื่อการอ้างสิทธิ์ที่ถูกต้อง (sub, email, ): role

    policy: (claims, item) => claims.sub.eq(item.user_id)
    
  2. บันทึก JWT ที่ถอดรหัสแล้วเพื่อยืนยันว่าค่าการอ้างสิทธิ์ตรงกับรหัสของคุณ

การตอบกลับ API เก่า

อาการ: ส่วนหน้าส่งคืนรูปร่างข้อมูลที่ล้าสมัยหลังจากการเปลี่ยนแปลงสคีมา

สาเหตุ: การกําหนดค่าที่สร้างขึ้นจะถูกแคช

วิธีการแก้:

  1. หยุดแบ็กเอนด์

  2. ลบไดเร็ก .temp/ ทอรีใน rayfin/:

    rm -rf rayfin/.temp/
    
  3. รีสตาร์ทบริการและใช้ Schema อีกครั้ง

ปัญหา CLI

ไม่พบคําสั่ง

อาการ: การเรียกใช้ npx rayfin จะส่งกลับ "ไม่พบคําสั่ง"

สาเหตุ: ไม่ได้ติดตั้ง CLI หรือ npm ไม่อยู่ใน PATH ของคุณ

วิธีการแก้:

  1. ตรวจสอบว่ามีการติดตั้ง Node.js และ npm แล้ว:

    node --version
    npm --version
    
  2. ติดตั้งการขึ้นต่อกันอีกครั้ง:

    npm install
    

เวอร์ชัน CLI ไม่ตรงกัน

อาการ: คําสั่ง CLI ล้มเหลวโดยมีข้อผิดพลาดที่ไม่คาดคิดหลังจากอัปเดต

สาเหตุ: เวอร์ชัน Cached CLI ล้าสมัย

วิธีการแก้:

อัปเดตและติดตั้งใหม่:

npm update --save
npm install
npx rayfin --version

ความไม่ตรงกันของเวอร์ชัน CLI ทั้งแบบทั่วโลกและภายในเครื่อง

อาการ: คําสั่ง CLI ล้มเหลวโดยมีข้อผิดพลาดที่ไม่คาดคิดในโครงการต่างๆ

สาเหตุ: การติดตั้งเวอร์ชัน CLI ทั่วโลกและในเครื่องและไม่ตรงกัน

วิธีแก้ไข: ตรวจสอบความถูกต้องของเวอร์ชัน npm list @microsoft/rayfin-cliในเครื่อง ซึ่งจะแสดงเวอร์ชันใน node_modules ของโปรเจ็กต์ปัจจุบันของคุณ ตรวจสอบเวอร์ชัน npm list -g @microsoft/rayfin-cliสากล นี่แสดงเวอร์ชันที่ติดตั้งทั่วทั้งระบบ ใช้กับ npm uninstall -g แพ็คเกจ Rayfin CLI เพื่อลบเวอร์ชันสากลและใช้เวอร์ชันในเครื่องของคุณ

ปัญหาการจัดการลับ

คําสั่งลับไม่แจ้งคําสั่ง

อาการ:npx rayfin secret set <NAME> ออกจากระบบโดยไม่แจ้งค่า

สาเหตุ:อินพุตมาตรฐานไม่ใช่เทอร์มินัลแบบโต้ตอบ หรือCIตัวแปรสภาพแวดล้อมถูกตั้งค่าเป็นtrue คําสั่งนี้ใช้พรอมต์โต้ตอบที่ถูกปกปิด

วิธีการแก้:

ใช้หนึ่งในทางเลือกที่รองรับสําหรับการสร้างความลับแบบไม่โต้ตอบต่อไปนี้:

  • ตั้งค่าความลับหนึ่งโดยส่งค่าของมันไปยังคําสั่ง:

    Get-Content .\secret.txt | npx rayfin secret set <NAME> --stdin
    
  • ตั้งค่าความลับหลายรายการจากไฟล์สภาพแวดล้อม:

    npx rayfin secret set --env-file .\secrets.env
    

เก็บค่าความลับออกจากประวัติเชลล์ของคุณ และอย่า commit secret.txt หรือ .\secrets.env ควบคุมซอร์สโค้ด

คําสั่งลับคืนสิทธิ์ถูกปฏิเสธ

อาการ:npx rayfin secret set หรือ npx rayfin secret list ส่งคืนข้อผิดพลาดสิทธิ์

สาเหตุ:แอปไม่ได้ถูกติดตั้ง หรือบัญชีที่ลงชื่อเข้าใช้ไม่สามารถเข้าถึงพื้นที่ทํางาน Fabric เป้าหมายได้

วิธีการแก้:

  1. รัน npx rayfin up เพื่อจัดเตรียมแอป
  2. เรียกใช้ npx rayfin login และเลือกบัญชีที่มีสิทธิ์เข้าถึงพื้นที่ทํางาน
  3. ลองใช้คําสั่งลับอีกครั้ง

สําหรับข้อมูลเพิ่มเติม ดูที่ จัดการความลับของฟังก์ชัน

ปัญหาเกี่ยวกับการสร้างและบรรจุภัณฑ์

คําสั่งสร้างล้มเหลว

อาการ: การปรับใช้โฮสติ้งแบบคงที่ล้มเหลวเนื่องจากคําสั่งบิลด์ไม่สร้างเอาต์พุต

สาเหตุ: สร้างข้อผิดพลาดหรือคําสั่งบิลด์ที่กําหนดค่าไม่ถูกต้อง

วิธีการแก้:

  1. เรียกใช้คําสั่งบิลด์ด้วยตนเอง:

    npm run build
    
  2. แก้ไขข้อผิดพลาดที่รายงาน

  3. ตรวจสอบว่าโฟลเดอร์เอาต์พุตมีไฟล์

โฟลเดอร์คงที่ว่างเปล่า

อาการ: การปรับใช้แบบคงที่ล้มเหลวด้วยข้อผิดพลาด "โฟลเดอร์ว่าง"

สาเหตุ: เส้นทางที่กําหนดค่า folder ไม่ถูกต้อง

วิธีการแก้:

ยืนยัน folder เส้นทางใน rayfin.yml ตรงกับเอาต์พุตบิลด์ของคุณ:

services:
  staticHosting:
    folder: dist  # Verify this matches your build output
    buildCommand: npm run build

ปัญหาฐานข้อมูล

การใช้สคีมาฐานข้อมูลล้มเหลว

อาการ: จะวิ่ง npx rayfin up db apply หรือ npx rayfin up db apply --force ล้มเหลว

สาเหตุ: สคีมาในฐานข้อมูลระยะไกลและสคีมาที่กําหนดในโค้ดแอปจะไม่ตรงกัน โค้ดแอปคือแหล่งข้อมูลความจริงสําหรับแอป Fabric

อย่าแก้ไขสคีมาฐานข้อมูลระยะไกลผ่านพอร์ทัล Fabric, SQL Server Management Studio (SSMS), ส่วนขยาย SQL Server สําหรับ Visual Studio Code หรือเครื่องมือ SQL อื่น ๆ การเปลี่ยนแปลงต่อไปนี้ต่อคอลัมน์ในเอนทิตีข้อมูลไม่รองรับ:

  • การเปลี่ยนชื่อคอลัมน์
  • การเปลี่ยนชนิดข้อมูลของคอลัมน์
  • การลบคอลัมน์

รองรับการเพิ่มคอลัมน์ การลบหรือแก้ไขคอลัมน์ที่มีอยู่อาจทําให้แอปและการปรับใช้บน Fabric เสียหาย

วิธีการแก้:

  1. ย้อนกลับการเปลี่ยนแปลงด้วยตนเองใด ๆ ในสคีมาฐานข้อมูลระยะไกลให้ตรงกับสคีมาในโค้ดแอป

  2. หากตัวแทนโค้ดได้ทําการเปลี่ยนแปลงสคีมาที่ไม่รองรับในโค้ดแอป ให้สั่งให้ตัวแทนย้อนกลับการเปลี่ยนแปลงนั้น

  3. รันคําสั่ง apply สคีมาอีกครั้ง:

    npx rayfin up db apply
    

    สําหรับการเปลี่ยนชื่อ --force คอลัมน์ อาจช่วยให้การอัปเดตสคีมาเสร็จสมบูรณ์:

    npx rayfin up db apply --force
    

    ข้อควรระวัง

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

การเชื่อมต่อถูกปฏิเสธ

อาการ: การดําเนินการข้อมูลล้มเหลวด้วยข้อผิดพลาดในการเชื่อมต่อ

สาเหตุ: คอนเทนเนอร์ฐานข้อมูลไม่ทํางานหรือการตรวจสอบสถานภาพล้มเหลว

วิธีการแก้:

  1. ตรวจสอบบันทึกคอนเทนเนอร์:

    docker compose logs -f
    
  2. รีสตาร์ทบริการ

ข้อมูลสูญหายหลังจากรีสตาร์ท

อาการ: ข้อมูลจะหายไปหลังจากหยุดและเริ่มบริการ

สาเหตุ: เล่มถูกลบด้วย--purge

วิธีการแก้:

ใช้ --down แทนการ --purge เก็บรักษาข้อมูล

ข้อจำกัดที่ทราบ

สําหรับข้อจํากัดในปัจจุบันและวิธีแก้ปัญหาที่แนะนํา ให้ดู:

  • count()ไม่พร้อมใช้งานในไคลเอ็นต์ GraphQL ที่คล่องแคล่ว ให้ใช้results.length
  • ไม่รองรับความสัมพันธ์แบบกลุ่มต่อกลุ่ม ให้ใช้เอนทิตีการรวมที่ชัดเจน
  • ออบเจ็กต์เซสชันทึบแสง - ตรวจสอบ isAuthenticated หรือ user คุณสมบัติ
  • หลังจากเปิดหรือปิดใช้งานการตรวจสอบสิทธิ์ใน rayfin.ymlรีสตาร์ทแบ็กเอนด์

รับความช่วยเหลือ

ถ้าปัญหายังคงอยู่:

  1. ตรวจสอบเอกสารประกอบของแอป Fabric
  2. ตรวจสอบที่เก็บ GitHub สําหรับปัญหาที่ทราบ
  3. ยื่นรายงานข้อบกพร่องพร้อมบันทึกโดยละเอียดและขั้นตอนการทําสําเนา