Documentación
Solución de problemas de escritorio
Identifique el proceso fallido, inspeccione el punto final real y el directorio de datos, y recupere sin confundir la vista previa con la persistencia.
Traducido automáticamente del inglés. Ver el original en inglés
Identificar el tiempo de ejecución antes de cambiarlo
Una sesión de escritorio tiene límites de falla separados: Vite proporciona activos de interfaz durante el desarrollo; el proceso Tauri Rust posee integración nativa; el sidecar Bun atiende solicitudes de aplicaciones y persistencia; la vista web de SolidJS se conecta a esa API. Una ventana en blanco, un tiempo de espera de inicio, una respuesta 401 y una lista de proyectos vacía pueden tener diferentes causas.
| Modo de lanzamiento | backend | Lo que puede establecer |
|---|---|---|
Paquete de escritorio dev sin URL complementaria | Cliente falso en memoria | Comportamiento de pantalla basado en dispositivos admitidos, no almacenamiento duradero de aplicaciones. |
| Vite con URL y token | Sidecar de carrera seleccionado | Solicitudes de navegador a servidor y persistencia en el directorio de ese servidor. |
Raíz desktop:dev | Sidecar supervisado compilado | Shell nativo, vista web, servidor/recursos incluidos y flujo de aplicaciones. |
Aplicación de escritorio tauri:dev sin binario existente | Sidecar de trozos generados | Comportamiento de caparazón aislado; el código auxiliar no es la API de la aplicación completa. |
Registre el comando de inicio y si el punto final provino de las variables Tauri o Vite. No elimine una base de datos ni reinstale dependencias simplemente porque un tiempo de ejecución diferente muestra datos diferentes.
Comprender el momento del inicio
El shell de Rust genera un token de inicio, resuelve los datos de la aplicación y los directorios de migración, y genera el sidecar de destino. el niño se une 127.0.0.1 en un puerto efímero. Espera hasta su publico /api/health responde, luego escribe un evento listo para JSON con ese puerto. La vista web invoca get_sidecar_endpoint y crea su tiempo de ejecución de API administrado.
| Presupuesto | Valor actual | Significado |
|---|---|---|
| Apretón de manos listo para Shell | 60 segundos por inicio | Espera máxima para el evento listo utilizable del niño. |
| Reinicio automático del supervisor | Uno | Un niño fallido no se reinicia indefinidamente. |
| Espera de punto final nativo | 125 segundos | Dos presupuestos listos más holgura. |
| Intento de conexión a vista web | 30 segundos | Tiempo de espera de estado/conexión para un intento. |
| Bucle de reintento de vista web | 150 segundos, 750 ms de pausa | Vuelve a resolver los puntos finales antes de ofrecer un error de tiempo de espera agotado. |
Reintentar reinicia los intentos de conexión de Webview; no repone un presupuesto de supervisión de Rust agotado. Solucione la causa de inicio y reinicie la aplicación cuando el supervisor haya alcanzado el estado de falla del terminal. Un puerto anterior a un reinicio infantil puede estar obsoleto.
Verifique los puertos y la salud por separado
usos de vita localhost:1420 con una selección de puerto estricta, que coincide con la URL de desarrollo configurada de Tauri. Falla en lugar de trasladarse silenciosamente a otro puerto. El puerto del sidecar no está relacionado y cambia entre lanzamientos. El puerto HTTPS complementario es un tercer escucha, predeterminado 8443, y Studio usa 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" La ruta de salud pública devuelve el estado y la marca de tiempo. Las rutas del sistema autenticadas exponen la preparación y la versión de la aplicación. Un proceso en buen estado no demuestra que todos los proveedores, consultas de bases de datos o diálogos nativos funcionen. comparar el API de salud y API del sistema al seleccionar las sondas.
Si el puerto 1420 está ocupado, identifique y detenga deliberadamente el servidor de desarrollo existente. Si un puerto API recordado rechaza conexiones, lea el evento listo actual o vuelva a resolver el punto final de Tauri en lugar de adivinar los puertos vecinos.
Reproducir con un sidecar aislado
Un proceso fuente es útil para separar los problemas del paquete nativo del comportamiento del servidor. Ejecute esto desde la raíz del repositorio en una terminal interactiva; crea un directorio de datos nuevo y utiliza explícitamente la carpeta de migración generada.
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 Copie el puerto anunciado en las variables de la sonda en una segunda terminal. El modo AI sin conexión evita depender de un modelo remoto configurado para diagnósticos de inicio básicos; no ejecuta un modelo local alternativo. El servidor observa el EOF estándar, un evento de apagado explícito e interrupciones normales del tiempo de ejecución.
Un proceso fuente utiliza archivos actuales. Un proceso nativo utiliza el ejecutable compilado ya preparado en src-tauri/binaries. Si solo falla la ejecución compilada, reconstruya mediante bun run build:sidecar e inspeccionar recursos de agrupación/migración. La edición de TypeScript no reemplaza un ejecutable que ya se está ejecutando.
Resolver la ruta real de la base de datos
| Process/tool | Selección de ruta |
|---|---|
| Sidecar lanzado por Tauri | Tauri app_data_dir(), entonces cadcamfun.db. |
| sidecar manual | CADCAMFUN_DATA_DIR/cadcamfun.db. |
| CLI de migración | DATABASE_URL, de lo contrario ./data/cadcamfun.db en relación con su directorio de procesos. |
Raíz db:migrate envoltura | Se ejecuta en el paquete de base de datos, normalmente dando packages/db/data/cadcamfun.db por defecto. |
| API de estudio local | CADCAMFUN_DB, entonces DATABASE_URL, luego raíz del repositorio data/cadcamfun.db. |
Estos archivos no son alias. Haga coincidir la ruta del proceso seleccionada antes de investigar los dibujos faltantes. Los dispositivos del navegador nunca abren estos archivos SQLite. El sidecar aplica migraciones sólo cuando su configuración proporciona una carpeta de migración; omitirlo no descubre automáticamente la carpeta del árbol de origen.
La capa de base de datos habilita WAL y claves externas. Antes de actualizar una base de datos existente, escribe una copia de seguridad previa a la migración automática y conserva cinco copias de seguridad coincidentes. No crea dicha copia de seguridad en cada guardado, inicio sin cambios, primera creación o prueba en memoria. Preservar una copia de seguridad consistente a través del procedimiento de base de datos/recuperación; copiar solo el archivo principal de una base de datos WAL en ejecución puede omitir el contenido WAL comprometido.
Leer la salida del protocolo y los registros
En una terminal de origen, la salida estándar está reservada para eventos de protocolo listo/error y los registros de la aplicación JSON van a stderr. En la aplicación nativa, el complemento de registro de Rust captura eventos del lado del shell, incluida la salida secundaria supervisada. El shell redacta líneas que pueden contener sus credenciales de lanzamiento.
el nativo get_logs_dir el comando resuelve el directorio de registro de la aplicación del sistema operativo. Es más confiable que asumir un camino universal entre sistemas. Un diagnóstico de desarrollador dentro de la vista web puede invocarlo a través de la interfaz de comando Tauri existente; La apertura de rutas nativas está restringida a las carpetas permitidas y rechaza los tipos de archivos ejecutables.
El componente de pantalla de inicio reutilizable admite una devolución de llamada de Ver registros opcional, pero la versión actual App.tsx no pasa esa devolución de llamada. No asuma que el botón Ver registros estará visible durante un error de inicio. Mantenga disponible la terminal de inicio de desarrollo o utilice el directorio de registro nativo a través de una superficie de diagnóstico adecuada.
Para obtener un informe, incluya el modo de inicio, las rutas de migración/datos no secretos, la espera transcurrida, la versión actual de la API, la etiqueta/mensaje de error exacto y los últimos eventos de inicio relevantes. Redactar tokens de lanzamiento/sesión/dispositivo, enlaces de emparejamiento, claves de modelo y material de firma.
Distinguir la autenticación de los datos vacíos
El modo de cliente real del navegador requiere ambos VITE_SIDECAR_URL y VITE_SIDECAR_TOKEN. Una URL sin token no activa el respaldo falso; La resolución del punto final falla. Las variables deben proporcionarse antes de que comience Vite. La actualización de un shell principal no reconfigura un servidor que ya se está ejecutando.
VITE_SIDECAR_URL=http://127.0.0.1:43111 VITE_SIDECAR_TOKEN=local-development-token bun run --filter @cadcamfun/desktop dev Las llamadas protegidas pueden utilizar el contexto de la sesión de la cuenta además del token de la aplicación. Los tokens puente complementarios e independientes tienen alcances más limitados y no sustituyen a un token de lanzamiento. Un 401 necesita diagnóstico de credenciales; un 403 necesita diagnóstico de operación/acceso; un proyecto ausente o inaccesible se puede informar como 404.
Algunas pantallas, incluidas las pestañas de recursos secundarios del proyecto, actualmente convierten los errores de listas individuales en matrices vacías. Una pestaña en blanco no es prueba suficiente de que se eliminaron registros. Leer el correspondiente proyecto, dibujo, o trayectoria de herramienta punto final antes de recrear el trabajo.
Un token de lanzamiento válido tiene 64 caracteres hexadecimales (32 bytes aleatorios) y cambia en cada lanzamiento. El shell del escritorio no emitió un token de otra forma.
Reconocer la vista previa y las limitaciones nativas
La API falsa maneja proyectos, dibujos, materiales, herramientas, máquinas, rutas de herramientas, KV y rutas de generador seleccionados. Las colecciones no admitidas devuelven HTTP 501 con un mensaje específico de vista previa. Los datos del dispositivo pertenecen a la página de ejecución. Una acción de vista previa exitosa no puede demostrar la persistencia de la organización, el complemento, la facturación o el comportamiento del proveedor en vivo.
Los diálogos nativos, las operaciones de llavero, la bandeja, el actualizador y los materiales de macOS requieren el host Tauri y las capacidades correctas. Es posible que un comando registrado aún no esté disponible para la vista web en su configuración de capacidad. Para abrir archivos, el shell registra las asociaciones admitidas y reenvía rutas; eso por sí solo no prueba que un editor en particular haya importado los contenidos.
Las fallas gráficas son otro límite. Un tamaño de contenedor distinto de cero, entidades/capas visibles, selección desbloqueada y WebGL compatible son requisitos previos para las interacciones relevantes de la ventana gráfica. Una malla renderizada es evidencia de renderizado, no de un guardado exitoso o de una verificación CAM. Utilice el diagnóstico de ventana gráfica para la capacidad del trabajador, el tiempo de espera y el comportamiento de cuatro vistas.
Recuperar preferencias y problemas de visualización
El registro de preferencia de vista web compartida es cadcamfun.settings. Los valores predeterminados incluyen milímetros, tema del sistema, tres decimales, preferencia GRBL, ajuste habilitado, tolerancia 0.01 mm y vidrio habilitado. Los campos almacenados se validan de forma independiente; los valores no válidos retroceden sin que el shell falle. El almacenamiento local lleno/bloqueado puede impedir la persistencia.
Cambiar las unidades de visualización no cambia la escala de la geometría CAD almacenada. La tolerancia del documento se propaga a través del asistente de configuración de verificación/generador/CAD compartido. Algunas funciones/valores giratorios utilizan explícitamente grados; Los ángulos para dibujar utilizan radianes. Verifique el contrato de campo antes de diagnosticar una discrepancia numérica como geometría corrupta.
El comportamiento del vidrio depende de la compatibilidad con Tauri/macOS. La implementación utiliza Liquid Glass cuando es compatible, vitalidad en macOS más antiguo a través del complemento y un respaldo opaco cuando no está disponible o está deshabilitado. Los cambios de tema/material no alteran la geometría, la propiedad del proyecto ni la evidencia de mecanizado.
Prefiera la configuración relevante o el control de funciones a borrar todo el almacenamiento de vistas web. Ese almacenamiento también puede contener transferencias de sesión/editor. Un restablecimiento de preferencias visuales no es un procedimiento de reparación de base de datos.
Separe la recuperación de la interfaz de usuario de la evidencia de mecanizado
Un proyecto cargado, un guardado HTTP exitoso, una ruta de herramienta animada y un NC generado son observaciones diferentes. Antes de confiar en un resultado de mecanizado guardado, inspeccione el NC exacto, el dibujo/stock de origen, los conjuntos de herramientas, la envolvente de la máquina, el poste seleccionado y la versión/problemas de verificación para ese resultado.
El código de instantánea CAM conserva la evidencia del kernel solo cuando el texto NC actual y su hash coinciden. Las escrituras de programas portátiles validan la coherencia del documento y pueden reevaluar las solicitudes del kernel capturadas. Editar NC o cambiar stock puede invalidar la evidencia anterior. Reabrir NC simple puede analizar un programa sin restaurar la misma prueba de fabricación.
Después de un bloqueo o una interrupción del guardado, primero inspeccione la fila guardada y sus versiones. El modo de guardado CAM registra el programa anterior antes de una actualización, mientras que el guardado manual de detalles de la ruta de herramienta registra la revisión actualizada. El historial del proyecto vuelve a estar separado. Usar la comparación de la historia elegir un camino de recuperación.
No convierta una verificación no resuelta en una operación aceptada porque la interfaz de usuario se recuperó. Vuelva a ejecutar la verificación adecuada con respecto a los recursos reales y NC; una sonda de estado de la aplicación no tiene autoridad sobre la seguridad de la máquina.
Triaje un fallo a la vez
- Registre el modo de inicio, las versiones del proceso, los puertos y el directorio de datos reales.
- Estado de la sonda, luego una lectura protegida. Separe la conectividad de la autorización.
- Inspeccione los errores de inicio/migración estructurados antes de restablecer o eliminar algo.
- Reproduzca contra un proceso fuente aislado cuando se sospeche de un problema compilado/nativo.
- Corrija la causa identificada, reinicie el proceso apropiado y actualice las variables de punto final obsoletas.
- Vuelva a abrir el documento/programa guardado e inspeccione el estado persistente, las versiones, las exportaciones y la verificación actual.
Los anclajes de implementación son app/App.tsx, app/sidecar.ts, src-tauri/src/{sidecar,commands,lib}.rs, el sidecar main.ts/config.ts/shutdown.tsy el ciclo de vida de la base de datos. Desarrollo local suministra detalles de configuración; pareja de compañeros maneja su límite de red independiente.
Lista de verificación de inicio
- ¿Está presente el binario sidecar para esta plataforma (
src-tauri/binaries/sidecar-<target triple>)?desktop:devlo construye;tauri:devpuede utilizar un talón. - ¿Las migraciones se realizan en
src-tauri/resources/migrations?bun run build:sidecarobun scripts/build.ts --only=resourceslos reescenifica. - ¿Se imprimió el sidecar?
ready¿en 60 segundos? busca unerrorlínea en stdout y registros JSON en stderr en el directorio de registro (get_logs_dir). - ¿Se reinició? Sólo se permite un reinicio automático; un segundo fallo deja el estado en
failed. - Hace
GET /api/health¿Respuesta en el puerto informado? Si lo hace pero las rutas protegidas devuelven 401, el token pertenece a un lanzamiento diferente. - ¿Se puede escribir en el directorio de datos y el archivo de la base de datos no se mantiene abierto mediante otro proceso con migraciones incompatibles?
| Minutero | Valor | Dueño |
|---|---|---|
| Apretón de manos listo | 60 s por intento | supervisor de Rust |
| Reinicios automáticos | 1 | supervisor de Rust |
| Espera de punto final | 125 s (dos apretones de manos + 5 s) | get_sidecar_endpoint |
| Presupuesto de recuperación de vista web | 150 s, 30 s por intento, 750 ms entre intentos | Vista web |
| Gracia de apagado | 2 s después de la línea de apagado, luego se cosecha el proceso (hasta 5 s) | supervisor de Rust |
Leyendo los registros
Los registros de Sidecar son líneas JSON en stderr, que se mantienen separadas del protocolo de enlace estándar. Las líneas que podrían contener credenciales se reemplazan por [redacted: line may contain credentials] antes de que se escriban, por lo que se espera una línea redactada en un registro, no corrupción. Si el protocolo de enlace en sí incluía dicha línea, el error de inicio informado es el marcador de redacción; lea las líneas stderr circundantes para conocer el contexto.
El directorio de registro es específico de la plataforma. Consíguelo del get_logs_dir comando en lugar de adivinar un camino, y ábralo con open_path, que acepta el directorio de registro de la aplicación.
Mensajes de error y lo que significan
| Mensaje | de donde viene | que hacer |
|---|---|---|
| La cola de malla 3D está llena. Reducir la complejidad de la escena. | Cola de mallado de ventana gráfica (128 trabajos) | Ocultar o simplificar cuerpos; la cola fue despejada |
| 3Se agotó el tiempo de espera del mallado D. Reducir la complejidad de la escena. | Un trabajo de mallado superó los 15 s | Simplifica el sólido; el trabajador fue reiniciado |
| No hay ningún proveedor de IA configurado. Agregue una clave API en la configuración de AI. | flujo asistente, code: "config" | Agregue una clave de proveedor; nada más está mal |
| El diario de migración heredado no coincide con las migraciones locales | Actualización de la base de datos al inicio | Mantener el directorio de datos; instalar la versión correspondiente |
| La solicitud de extracción no está abierta | Fusionar o cerrar un PR fusionado/cerrado | Actualizar la lista de relaciones públicas |
| Revisión desconocida <rev> | Restaurar historial o iniciar sesión con una mala revisión | Elija una revisión del registro |
| Plugin <id> may not use "<capability>": it was not granted at install time | Contexto del complemento | Reinstale y otorgue la capacidad, o cambie el complemento |
| Los ejes giratorios de la máquina no pueden alcanzar este plano de trabajo dentro de sus límites. | Mecanizado indexado | Usa otra configuración para esa cara. |