Documentazione
Risoluzione dei problemi del desktop
Identifica il processo in errore, ispeziona l'endpoint reale e la directory dei dati ed esegui il ripristino senza confondere l'anteprima con la persistenza.
Tradotto automaticamente dall'inglese. Vedi l'originale in inglese
Identificare il runtime prima di modificarlo
Una sessione desktop ha limiti di errore separati: Vite fornisce risorse frontend durante lo sviluppo; il processo Tauri Rust possiede un'integrazione nativa; il sidecar Bun serve le richieste applicative e la persistenza; la visualizzazione web SolidJS si connette a quell'API. Una finestra vuota, un timeout di avvio, una risposta 401 e un elenco di progetti vuoto possono avere cause diverse.
| Modalità di lancio | Backend | Cosa può stabilire |
|---|---|---|
Pacchetto desktop dev senza URL collaterale | Client falso in memoria | Comportamento dello schermo basato sul dispositivo supportato, non archiviazione durevole delle applicazioni. |
| Invito con URL e token | Sidecar da corsa selezionato | Richieste da browser a server e persistenza nella directory di quel server. |
Radice desktop:dev | Sidecar supervisionato compilato | Shell nativa, visualizzazione Web, server/risorse in bundle e flusso dell'applicazione. |
App desktop tauri:dev senza binario esistente | Sidecar stub generato | Comportamento del guscio isolato; lo stub non è l'API dell'applicazione completa. |
Registra il comando di avvio e se l'endpoint proviene da variabili Tauri o Vite. Non eliminare un database o reinstallare le dipendenze semplicemente perché un runtime diverso mostra dati diversi.
Comprendere i tempi di avvio
La shell Rust genera un token di avvio, risolve i dati dell'applicazione e le directory di migrazione e genera il sidecar di destinazione. Il bambino si lega 127.0.0.1 su un porto effimero. Aspetta finché non è pubblico /api/health risponde, quindi scrive un evento pronto per JSON con quella porta. La visualizzazione web invoca get_sidecar_endpoint e crea il relativo runtime API gestito.
| Bilancio | Valore attuale | Senso |
|---|---|---|
| Stretta di mano pronta per la shell | 60 secondi all'avvio | Massima attesa per l'evento pronto utilizzabile del bambino. |
| Riavvio automatico del supervisore | Uno | Un figlio fallito non viene riavviato indefinitamente. |
| Attesa dell'endpoint nativo | 125 secondi | Due budget pronti più margine di flessibilità. |
| Tentativo di connessione alla visualizzazione Web | 30 secondi | Timeout di integrità/connessione per un tentativo. |
| Ciclo di tentativi di visualizzazione Web | 150 secondi, 750 ms di pausa | Risolve nuovamente gli endpoint prima di offrire un errore scaduto. |
Riprova riavvia i tentativi di connessione alla visualizzazione Web; non ricostituisce un budget esaurito per la supervisione di Rust. Risolvi la causa dell'avvio e riavvia l'app quando il supervisore ha raggiunto lo stato di terminale non riuscito. Una porta precedente al riavvio figlio può essere obsoleta.
Controlla le porte e l'integrità separatamente
Vite utilizza localhost:1420 con una rigorosa selezione della porta, corrispondente all'URL di sviluppo configurato di Tauri. Fallisce invece di spostarsi silenziosamente su un'altra porta. Il porting del sidecar non è correlato e cambia tra un lancio e l'altro. La porta HTTPS complementare è un terzo listener, predefinito 8443, e Studio utilizza il loopback 4396.
CADCAM_URL=http://127.0.0.1:43111
CADCAM_TOKEN=local-development-token
curl --max-time 5 --fail-with-body "$CADCAM_URL/api/health"
curl --max-time 5 --fail-with-body "$CADCAM_URL/health" -H "Authorization: Bearer $CADCAM_TOKEN"
curl --max-time 5 --fail-with-body "$CADCAM_URL/version" -H "Authorization: Bearer $CADCAM_TOKEN" Il percorso della sanità pubblica restituisce lo stato e il timestamp. I percorsi di sistema autenticati espongono la disponibilità e la versione dell'applicazione. Un processo integro non dimostra che tutti i provider, le query di database o le finestre di dialogo native funzionino. Confronta il API sanitaria e API di sistema quando si selezionano le sonde.
Se la porta 1420 è occupata, identifica e arresta deliberatamente il server di sviluppo esistente. Se una porta API ricordata rifiuta le connessioni, leggi l'evento ready corrente o risolvi nuovamente l'endpoint Tauri anziché indovinare le porte vicine.
Riprodurre con un sidecar isolato
Un processo di origine è utile per separare i problemi del bundle nativo dal comportamento del server. Eseguilo dalla root del repository in un terminale interattivo; crea una nuova directory di dati e utilizza esplicitamente la cartella di migrazione generata.
CADCAM_DIAGNOSTIC_DIR=$(mktemp -d /tmp/cadcamfun-desktop-guide.XXXXXX)
CADCAMFUN_TOKEN=local-development-token CADCAMFUN_DATA_DIR="$CADCAM_DIAGNOSTIC_DIR/data" CADCAMFUN_MIGRATIONS_DIR="$PWD/packages/db/drizzle" CADCAMFUN_AI_OFFLINE=true bun --no-env-file apps/sidecar/src/main.ts Copia la porta annunciata nelle variabili della sonda in un secondo terminale. La modalità AI offline evita di dipendere da un modello remoto configurato per la diagnostica di avvio di base; non esegue un modello locale alternativo. Il server osserva stdin EOF, un evento di spegnimento esplicito e normali interruzioni di runtime.
Un processo di origine utilizza i file correnti. Un processo nativo utilizza l'eseguibile compilato già messo in scena src-tauri/binaries. Se solo l'esecuzione compilata fallisce, ricostruire bun run build:sidecar e ispezionare le risorse di raggruppamento/migrazione. La modifica di TypeScript non sostituisce un eseguibile già in esecuzione.
Risolvere il percorso effettivo del database
| Process/tool | Selezione del percorso |
|---|---|
| Sidecar lanciato da Tauri | Tauri app_data_dir(), poi cadcamfun.db. |
| Sidecar manuale | CADCAMFUN_DATA_DIR/cadcamfun.db. |
| CLI di migrazione | DATABASE_URL, altrimenti ./data/cadcamfun.db rispetto alla directory del processo. |
Radice db:migrate involucro | Viene eseguito nel pacchetto database, normalmente dando packages/db/data/cadcamfun.db per impostazione predefinita. |
| API Studio locale | CADCAMFUN_DB, poi DATABASE_URL, quindi repository-root data/cadcamfun.db. |
Questi file non sono alias. Abbina il percorso del processo selezionato prima di indagare sui disegni mancanti. I dispositivi browser non aprono mai questi file SQLite. Il sidecar applica le migrazioni solo quando la sua configurazione fornisce una cartella di migrazione; omettendolo non viene rilevata automaticamente la cartella dell'albero di origine.
Il livello del database abilita WAL e chiavi esterne. Prima di un aggiornamento del database esistente, scrive un backup automatico di pre-migrazione e conserva cinque backup corrispondenti. Non crea tale backup a ogni salvataggio, avvio senza modifiche, prima creazione o test in memoria. Conservare un backup coerente attraverso la procedura di database/ripristino; copiare solo il file principale di un database WAL in esecuzione può omettere il contenuto WAL impegnato.
Leggere l'output e i log del protocollo
In un terminale sidecar di origine, stdout è riservato per eventi di protocollo ready/error e i log dell'applicazione JSON vanno a stderr. Nell'app nativa, il plug-in di registrazione di Rust cattura gli eventi lato shell, incluso l'output secondario supervisionato. La shell oscura le righe che potrebbero contenere le sue credenziali di lancio.
Il nativo get_logs_dir il comando risolve la directory del registro dell'applicazione del sistema operativo. È più affidabile che assumere un percorso universale attraverso i sistemi. Una diagnostica dello sviluppatore all'interno della visualizzazione web può richiamarla tramite l'interfaccia di comando Tauri esistente; l'apertura del percorso nativo è limitata alle cartelle consentite e rifiuta i tipi di file eseguibili.
Il componente riutilizzabile della schermata di avvio supporta un callback opzionale per i registri di visualizzazione, ma il file current App.tsx non passa quella richiamata. Non dare per scontato che il pulsante Visualizza registri sarà visibile durante un errore di avvio. Mantenere disponibile il terminale di avvio dello sviluppo oppure utilizzare la directory dei log nativi tramite un'apposita superficie diagnostica.
Per un report, includi la modalità di avvio, i percorsi di migrazione/dati non segreti, l'attesa trascorsa, la versione corrente dell'API, il tag/messaggio di errore esatto e gli ultimi eventi di avvio rilevanti. Redigere token di lancio/sessione/dispositivo, collegamenti di accoppiamento, chiavi del modello e materiale per la firma.
Distinguere l'autenticazione dai dati vuoti
La modalità client reale del browser richiede entrambi VITE_SIDECAR_URL e VITE_SIDECAR_TOKEN. Un URL senza token non attiva il falso fallback; la risoluzione dell'endpoint non riesce. Le variabili devono essere fornite prima dell'avvio di Vite. L'aggiornamento di una shell genitore non riconfigura un server già in esecuzione.
VITE_SIDECAR_URL=http://127.0.0.1:43111 VITE_SIDECAR_TOKEN=local-development-token bun run --filter @cadcamfun/desktop dev Le chiamate protette possono utilizzare il contesto della sessione dell'account oltre al token dell'applicazione. I token bridge associati e autonomi hanno ambiti più ristretti e non sostituiscono un token di lancio. A 401 occorre una diagnosi delle credenziali; un 403 necessita di diagnosi di funzionamento/accesso; un progetto assente o inaccessibile può essere segnalato come 404.
Alcune schermate, incluse le schede delle risorse secondarie del progetto, attualmente trasformano gli errori dei singoli elenchi in array vuoti. Una scheda vuota non è una prova sufficiente che i record siano stati eliminati. Leggi il corrispondente progetto, disegno, o percorso utensile endpoint prima di ricreare il lavoro.
Un token di lancio valido contiene 64 caratteri esadecimali (32 byte casuali) e cambia a ogni avvio. La shell del desktop non ha emesso un token di forma diversa.
Riconoscere l'anteprima e le limitazioni native
La falsa API gestisce progetti, disegni, materiali, strumenti, macchine, percorsi utensile, KV e percorsi del generatore selezionati. Le raccolte non supportate restituiscono HTTP 501 con un messaggio specifico per l'anteprima. I dati degli incontri appartengono alla pagina corrente. Un'azione di anteprima riuscita non può dimostrare il comportamento persistente dell'organizzazione, del plug-in, della fatturazione o del fornitore attivo.
Le finestre di dialogo native, le operazioni del portachiavi, il vassoio, il programma di aggiornamento e i materiali macOS richiedono l'host Tauri e le funzionalità corrette. Un comando registrato può ancora non essere disponibile per la visualizzazione Web nella sua configurazione di funzionalità. Per l'apertura dei file, la shell registra le associazioni supportate e inoltra i percorsi; questo da solo non prova che un particolare editor abbia importato i contenuti.
I guasti grafici sono un altro limite. Una dimensione del contenitore diversa da zero, entità/livelli visibili, selezione sbloccata e WebGL supportato sono prerequisiti per le interazioni del viewport rilevanti. Una mesh renderizzata è la prova del rendering, non di un salvataggio riuscito o di una verifica CAM. Usa il diagnostica della vista per la capacità del lavoratore, il timeout e il comportamento a quattro visualizzazioni.
Ripristina le preferenze e i problemi di visualizzazione
Il record delle preferenze di visualizzazione Web condiviso è cadcamfun.settings. Le impostazioni predefinite includono millimetri, tema di sistema, tre decimali, preferenza GRBL, snap abilitato, tolleranza 0.01 mm e vetro abilitato. I campi memorizzati vengono convalidati in modo indipendente; i valori non validi rientrano senza far fallire la shell. L'archiviazione locale completa/bloccata può impedire la persistenza.
La modifica delle unità di visualizzazione non ridimensiona la geometria CAD memorizzata. La tolleranza del documento viene propagata tramite l'assistente condiviso delle impostazioni CAD/generatore/verifica. Alcuni valori di funzioni/rotazioni utilizzano esplicitamente i gradi; gli angoli di disegno utilizzano i radianti. Verificare il contratto sul campo prima di diagnosticare una mancata corrispondenza numerica come geometria danneggiata.
Il comportamento del vetro dipende dal supporto Tauri/macOS. L'implementazione utilizza Liquid Glass dove supportato, vivacità su macOS meno recenti tramite il plug-in e un fallback opaco quando non disponibile o disabilitato. Le modifiche al tema/materiale non alterano la geometria, la proprietà del progetto o le prove di lavorazione.
Preferisci le impostazioni pertinenti o il controllo delle funzionalità rispetto alla cancellazione di tutta la memoria di visualizzazione web. Tale spazio di archiviazione può contenere anche passaggi di sessione/editor. Il ripristino delle preferenze visive non è una procedura di ripristino del database.
Separare il recupero dell'interfaccia utente dalle prove di lavorazione
Un progetto caricato, un salvataggio HTTP riuscito, un percorso utensile animato e un NC generato sono osservazioni diverse. Prima di fare affidamento su un risultato di lavorazione salvato, ispezionare l'esatto NC, il disegno/il grezzo di origine, gli assiemi di utensili, la dotazione della macchina, il post selezionato e il rilascio/problemi di verifica per quel risultato.
Il codice dell'istantanea CAM conserva l'evidenza del kernel solo quando il testo NC corrente e il relativo hash corrispondono. Le scritture del programma portatile convalidano la coerenza del documento e possono rivalutare le richieste del kernel catturate. La modifica del NC o il cambio dello stock possono invalidare le prove precedenti. La riapertura del semplice NC può analizzare un programma senza ripristinare la stessa prova di produzione.
Dopo un arresto anomalo o un salvataggio interrotto, ispeziona innanzitutto la riga salvata e le relative versioni. Il salvataggio modale CAM registra il programma precedente prima di un aggiornamento, mentre il salvataggio manuale dei dettagli del percorso utensile registra la revisione aggiornata. La cronologia del progetto è di nuovo separata. Utilizzo il confronto storico scegliere un percorso di recupero.
Non convertire un assegno non risolto in un'operazione accettata perché l'interfaccia utente è stata ripristinata. Rieseguire la verifica appropriata rispetto alle risorse effettive e alle NC; un'analisi dello stato dell'applicazione non ha autorità sulla sicurezza della macchina.
Triage un fallimento alla volta
- Registra la modalità di avvio, le versioni del processo, le porte e la directory dei dati effettivi.
- Sonda l'integrità, quindi una lettura protetta. Connettività separata dall'autorizzazione.
- Ispeziona gli errori strutturati di avvio/migrazione prima di reimpostare o eliminare qualsiasi cosa.
- Riproduci rispetto a un processo di origine isolato quando si sospetta un problema compilato/nativo.
- Correggere la causa identificata, riavviare il processo appropriato e aggiornare le variabili dell'endpoint non aggiornate.
- Riapri il documento/programma salvato e controlla lo stato persistente, le versioni, le esportazioni e la verifica corrente.
Gli ancoraggi di implementazione sono app/App.tsx, app/sidecar.ts, src-tauri/src/{sidecar,commands,lib}.rs, il sidecar main.ts/config.ts/shutdown.tse il ciclo di vita del database. Sviluppo locale fornisce i dettagli di configurazione; abbinamento di compagni gestisce il proprio confine di rete separato.
Lista di controllo di avvio
- È presente il binario sidecar per questa piattaforma (
src-tauri/binaries/sidecar-<target triple>)?desktop:devlo costruisce;tauri:devpuò usare uno stub. - Le migrazioni vengono organizzate in fasi
src-tauri/resources/migrations?bun run build:sidecarobun scripts/build.ts --only=resourcesli rimonta. - Il sidecar è stato stampato
readyentro 60 secondi? Cerca unerrorriga su stdout e JSON accede a stderr nella directory dei log (get_logs_dir). - Si è riavviato? È consentito un solo riavvio automatico; un secondo fallimento lascia lo stato a
failed. - Fa
GET /api/healthrisposta sulla porta segnalata? In tal caso, ma i percorsi protetti restituiscono 401, il token appartiene a un lancio diverso. - La directory dei dati è scrivibile e il file del database non è tenuto aperto da un altro processo con migrazioni incompatibili?
| Timer | Valore | Proprietario |
|---|---|---|
| Pronta stretta di mano | 60 s per tentativo | Supervisore della Rust |
| Riavvii automatici | 1 | Supervisore della Rust |
| Attesa dell'endpoint | 125 s (due strette di mano + 5 s) | get_sidecar_endpoint |
| Budget per il recupero di Webview | 150 s, 30 s per tentativo, 750 ms tra i tentativi | Visualizzazione Web |
| Grazia dello spegnimento | 2 s dopo la linea di spegnimento, quindi il processo viene completato (fino a 5 s) | Supervisore della Rust |
Lettura dei log
I log sidecar sono linee JSON su stderr, mantenute separate dall'handshake stdout. Le righe che potrebbero contenere credenziali vengono sostituite da [redacted: line may contain credentials] prima che vengano scritti, quindi è prevista una riga oscurata in un registro, non corruzione. Se l'handshake stesso conteneva una linea di questo tipo, l'errore di avvio segnalato è l'indicatore di redazione; leggere le righe stderr circostanti per il contesto.
La directory dei log è specifica della piattaforma. Ottienilo da get_logs_dir comando invece di indovinare un percorso e aprirlo con open_path, che accetta la directory del registro dell'applicazione.
Messaggi di errore e cosa significano
| Messaggio | Da dove viene | Cosa fare |
|---|---|---|
| La coda mesh 3D è piena. Ridurre la complessità della scena. | Coda di meshing viewport (128 lavori) | Nascondere o semplificare i corpi; la coda è stata cancellata |
| 3Mesh D scaduto. Ridurre la complessità della scena. | Un processo di meshing ha superato 15 s | Semplificare il solido; il lavoratore è stato riavviato |
| Nessun provider AI è configurato. Aggiungi una chiave API nelle impostazioni AI. | Flusso dell'assistente, code: "config" | Aggiungi una chiave del provider; nient'altro è sbagliato |
| Il diario delle migrazioni legacy non corrisponde alle migrazioni locali | Aggiornamento del database all'avvio | Conserva la directory dei dati; installare la versione corrispondente |
| La richiesta di pull non è aperta | Unire o chiudere un PR unito/chiuso | Aggiorna l'elenco PR |
| Revisione sconosciuta <rev> | Ripristino della cronologia o registro con una revisione errata | Scegli una revisione dal registro |
| Plugin <id> may not use "<capability>": it was not granted at install time | Contesto del plugin | Reinstallare e concedere la funzionalità oppure modificare il plug-in |
| Gli assi rotanti della macchina non possono raggiungere questo piano di lavoro entro i loro limiti | Lavorazione indicizzata | Usa un'altra configurazione per quella faccia |