Behebe SQLite-Bindungsprobleme für produktiven Einsatz
- Verbessere SQLite-Konfiguration mit optimalen Performance-Einstellungen - Erweitere Dockerfile mit umfassenden Abhängigkeiten für zuverlässige SQLite-Kompilierung - Füge native Buildflag-Optionen und Umgebungsvariablen für ARM-Kompatibilität hinzu - Optimiere Startup-Skript mit zuverlässigerer Datenbank-Initialisierung - Setze korrekte Berechtigungen für Datenbank-Verzeichnis und -Dateien - Entferne fehlerträchtige Mock-Implementierung zugunsten einer robusten Produktiv-Lösung 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,28 +1,23 @@
|
||||
import { env } from "@/utils/env";
|
||||
import Database from "better-sqlite3";
|
||||
import { drizzle } from "drizzle-orm/better-sqlite3";
|
||||
import * as schema from "@/server/db/schema";
|
||||
|
||||
// Wrap database initialization in try-catch to handle native binding errors
|
||||
let sqlite;
|
||||
let db;
|
||||
// Stellen sicher, dass DB_PATH tatsächlich gesetzt ist
|
||||
const dbPath = env.DB_PATH || "/app/db/sqlite.db";
|
||||
|
||||
try {
|
||||
// Dynamically import better-sqlite3 to handle binding errors more gracefully
|
||||
const Database = require("better-sqlite3");
|
||||
sqlite = new Database(env.DB_PATH);
|
||||
|
||||
const { drizzle } = require("drizzle-orm/better-sqlite3");
|
||||
db = drizzle(sqlite, { schema });
|
||||
} catch (error) {
|
||||
console.error("Failed to initialize database:", error);
|
||||
|
||||
// Create mock database for SSR to prevent crashes
|
||||
db = {
|
||||
query: () => [],
|
||||
select: () => ({ get: () => null, all: () => [] }),
|
||||
insert: () => ({ values: () => ({ returning: () => [] }) }),
|
||||
update: () => ({ set: () => ({ where: () => [] }) }),
|
||||
delete: () => ({ where: () => [] }),
|
||||
};
|
||||
}
|
||||
// Konfiguriere SQLite für zuverlässigeren Betrieb
|
||||
const sqlite = new Database(dbPath, {
|
||||
// Setze längeres Timeout für Operationen auf langsamen Geräten (RPi)
|
||||
timeout: 30000,
|
||||
// Aktiviere WAL-Modus für höhere Performance
|
||||
journalMode: 'wal',
|
||||
// Verbesserte Fehlerbehandlung
|
||||
verbose: console.error,
|
||||
});
|
||||
|
||||
export { db };
|
||||
// Aktiviere Fremdschlüssel-Constraints
|
||||
sqlite.pragma('foreign_keys = ON');
|
||||
|
||||
// Exportiere die Drizzle-Datenbankinstanz
|
||||
export const db = drizzle(sqlite, { schema });
|
||||
|
||||
Reference in New Issue
Block a user