* 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.
11 KiB
SQLite Runtime Resolution (Ελληνικά)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 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 επιλύει τον οδηγό SQLite κατά την εκκίνηση μέσω μιας αλυσίδας εφεδρείας 5 βημάτων:
-
Ενσωματωμένο
better-sqlite3(μέσω τουdependenciesστοpackage.json) — η ταχύτερη επιλογή, εγγενές δυαδικό αρχείο, εγκαθίσταται από τοnpm installόταν υπάρχουν διαθέσιμα εργαλεία μεταγλώττισης. -
better-sqlite3εγκατεστημένο κατά τον χρόνο εκτέλεσης (στο~/.omniroute/runtime/) — εγκαθίσταται με καθυστέρηση κατά την πρώτη εκτέλεση Ή από τοscripts/build/postinstall.mjs → scripts/postinstall.mjs. Επικυρώνει τα magic bytes του εγγενούς αρχείου.node(ELF / Mach-O / PE) πριν από τη φόρτωση, για προστασία από κατεστραμμένα δυαδικά αρχεία ή αρχεία για λανθασμένη πλατφόρμα. -
node:sqlite(τυπική βιβλιοθήκη Node ≥22.5) — δεν απαιτείται εγγενής μεταγλώττιση· χρησιμοποιείται όταν αποτυγχάνουν και οι δύο διαδρομές του better-sqlite3. Περιορισμένο σύνολο δυνατοτήτων. -
sql.js(WASM) — τελική εφεδρική επιλογή. Λειτουργεί παντού, αλλά είναι πιο αργό και εγγράφει δεδομένα ανά διαστήματα αντί για συγχρονισμένα.
Γιατί αυτή η πολυπλοκότητα;
- Windows EBUSY: Το
npm install -g omniroute@latestμπορεί να αποτύχει εάν τοbetter_sqlite3.nodeτης προηγούμενης έκδοσης είναι κλειδωμένο από μια διεργασία που εκτελείται. Η εγκατάσταση κατά τον χρόνο εκτέλεσης στο~/.omniroute/runtime/παρακάμπτει την καθολική κρυφή μνήμη του npm. - Απουσία εργαλείων μεταγλώττισης: Ορισμένα περιβάλλοντα (εταιρικά Windows χωρίς VS Build
Tools, ελάχιστες εικόνες Docker) δεν μπορούν να μεταγλωττίσουν το
better-sqlite3. Το πρόγραμμα εγκατάστασης κατά τον χρόνο εκτέλεσης ανακτά ένα προκατασκευασμένο δυαδικό αρχείο από το μητρώο npm· οι εφεδρικοί οδηγοί διασφαλίζουν ότι το OmniRoute εξακολουθεί να εκκινείται ακόμη και αν αυτό αποτύχει. - Συστήματα απομονωμένα από το δίκτυο: Εάν το μητρώο npm δεν είναι προσβάσιμο, το
node:sqliteή τοsql.jsεγγυώνται τη βασική λειτουργικότητα.
Επικύρωση magic bytes
Πριν από τη φόρτωση ενός αρχείου .node εγκατεστημένου κατά τον χρόνο εκτέλεσης, το OmniRoute διαβάζει τα πρώτα 8
bytes και τα συγκρίνει με γνωστές μαγικές υπογραφές πλατφορμών:
| Πλατφόρμα | Bytes (hex) | Ετικέτα |
|---|---|---|
| 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 (universal) | CA FE BA BE |
macho-fat |
| Windows | 4D 5A (MZ) |
pe |
Μια μαγική υπογραφή που δεν αντιστοιχεί → το αρχείο αγνοείται και η διαδικασία εφεδρείας συνεχίζει στο επόμενο βήμα.
Έλεγχος του ενεργού οδηγού
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" }
Χειροκίνητος έλεγχος
# Παράλειψη της προθέρμανσης postinstall (για γρήγορες εγκαταστάσεις CI)
OMNIROUTE_SKIP_POSTINSTALL=1 npm install -g omniroute
# Αναγκαστική επανεγκατάσταση του better-sqlite3 κατά τον χρόνο εκτέλεσης
rm -rf ~/.omniroute/runtime
omniroute # θα επανεγκατασταθεί στην επόμενη εκκίνηση
# Έλεγχος του ενεργού οδηγού
omniroute config db-info # (εάν υπάρχει η εντολή CLI)
Αναφορά
Υλοποίηση:
bin/cli/runtime/magicBytes.mjs— βοηθητικές συναρτήσεις επικύρωσης magic bytes δυαδικών αρχείωνbin/cli/runtime/sqliteRuntime.mjs— επιλυτής 5 βημάτων κατά τον χρόνο εκτέλεσης + πρόγραμμα εγκατάστασης με καθυστέρησηbin/cli/runtime/index.mjs— ενορχηστρωτής εκκίνησης (warmUpRuntimes())scripts/postinstall.mjs— άγκιστρο npm μετά την εγκατάσταση (μη μοιραία προθέρμανση)src/lib/db/core.ts— εξαγωγέςensureDbInitialized()/getDriverInfo()
Τοπολογία μοναδικού εγγραφέα (δεν υποστηρίζεται HA)
Η παραπάνω αλυσίδα εφεδρείας οδηγών εξακολουθεί να εκτελείται σε μία διεργασία. Από προεπιλογή, το SQLite του OmniRoute έχει έναν μόνο εγγραφέα:
- Μη συνδέετε δύο αντίγραφα του OmniRoute στο ίδιο αρχείο
storage.sqlite. - Μια επανεκκίνηση container, μια ανάπτυξη Recreate, ένας τερματισμός OOM ή μια επανεκκίνηση HEALTHCHECK διακόπτει κάθε ενεργή συνεδρία SSE. Δεν υπάρχει ομαλή αποστράγγιση συνεδριών στην τυπική διαδρομή.
- Ένας έλεγχος λειτουργικότητας του orchestrator που θεωρεί ότι ένα αργό
/healthzσημαίνει μη λειτουργική κατάσταση θα τερματίσει το μοναδικό αντίγραφο. Προτιμήστε έλεγχο λειτουργικότητας TCP + έλεγχο ετοιμότητας HTTP/healthz. Δείτε τον Οδηγό Docker — διαθεσιμότητα και τις προτάσεις για ελέγχους Kubernetes.