* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
8.2 KiB
SQLite Runtime Resolution (Italiano)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
OmniRoute risolve il proprio driver SQLite all'avvio tramite una catena di fallback in 5 passaggi:
-
better-sqlite3incluso (tramitedependenciesinpackage.json) — il più veloce, binario nativo, installato danpm installquando sono presenti gli strumenti di compilazione. -
better-sqlite3installato a runtime (in~/.omniroute/runtime/) — installato in modo differito alla prima esecuzione OPPURE dascripts/build/postinstall.mjs → scripts/postinstall.mjs. Convalida i magic byte del file nativo.node(ELF / Mach-O / PE) prima del caricamento per proteggersi da binari corrotti o destinati alla piattaforma sbagliata. -
node:sqlite(libreria standard di Node ≥22.5) — non richiede una compilazione nativa; viene utilizzato quando entrambi i percorsi di better-sqlite3 falliscono. Set di funzionalità limitato. -
sql.js(WASM) — fallback finale. Funziona ovunque, ma è più lento e scrive i dati a intervalli anziché in modo sincrono.
Perché questa complessità?
- EBUSY su Windows:
npm install -g omniroute@latestpuò non riuscire se il filebetter_sqlite3.nodedella versione precedente è bloccato da un processo in esecuzione. L'installazione a runtime in~/.omniroute/runtime/evita la cache npm globale. - Assenza di strumenti di compilazione: alcuni ambienti (Windows aziendale senza VS Build
Tools, immagini Docker minimali) non possono compilare
better-sqlite3. Il programma di installazione a runtime recupera un binario precompilato dal registro npm; i driver di fallback garantiscono che OmniRoute possa comunque avviarsi anche se l'operazione non riesce. - Sistemi isolati dalla rete: se il registro npm non è raggiungibile,
node:sqliteosql.jsgarantiscono le funzionalità di base.
Convalida dei magic byte
Prima di caricare un file .node installato a runtime, OmniRoute legge i primi 8
byte e li confronta con i magic byte noti delle piattaforme:
| Piattaforma | Byte (hex) | Etichetta |
|---|---|---|
| Linux | 7F 45 4C 46 |
elf |
| macOS 64 bit BE | FE ED FA CF |
macho |
| macOS 64 bit LE | CF FA ED FE |
macho-le |
| macOS fat (universale) | CA FE BA BE |
macho-fat |
| Windows | 4D 5A (MZ) |
pe |
Un magic byte non corrispondente → il file viene ignorato e il fallback prosegue al passaggio successivo.
Verifica del driver attivo
import { getDriverInfo } from "@/lib/db/core";
const info = getDriverInfo();
// { source: "bundled" | "runtime" | "runtime-installed-now" | "node-sqlite" | "sql-js",
// kind: "better-sqlite3" | "node-sqlite" | "sql-js" }
Controllo manuale
# Ignora il riscaldamento post-installazione (per installazioni CI rapide)
OMNIROUTE_SKIP_POSTINSTALL=1 npm install -g omniroute
# Forza la reinstallazione di better-sqlite3 a runtime
rm -rf ~/.omniroute/runtime
omniroute # verrà reinstallato al prossimo avvio
# Verifica quale driver è attivo
omniroute config db-info # (se il comando CLI esiste)
Riferimenti
Implementazione:
bin/cli/runtime/magicBytes.mjs— funzioni di supporto per la convalida dei magic byte dei binaribin/cli/runtime/sqliteRuntime.mjs— risolutore a runtime in 5 passaggi + programma di installazione differitabin/cli/runtime/index.mjs— orchestratore di avvio (warmUpRuntimes())scripts/postinstall.mjs— hook npm successivo all'installazione (riscaldamento non bloccante)src/lib/db/core.ts— esportazioni diensureDbInitialized()/getDriverInfo()
Topologia a singolo writer (HA non supportata)
La catena di fallback dei driver descritta sopra viene comunque eseguita in un solo processo. Con SQLite predefinito, OmniRoute è un sistema a singolo writer:
- Non collegare due repliche di OmniRoute allo stesso file
storage.sqlite. - Un riavvio del container, un deployment Recreate, un OOM kill o un riavvio dovuto a HEALTHCHECK interrompe ogni sessione SSE in corso. Nel percorso standard non è previsto alcun drenaggio delle sessioni.
- Una verifica di liveness dell'orchestratore che considera una risposta lenta di
/healthzcome un arresto anomalo terminerà l'unica replica. Preferire una verifica di liveness TCP + una verifica di readiness HTTP su/healthz. Consultare la Guida Docker — disponibilità e i consigli per le probe Kubernetes.