From 5616ee83956635176e3765b7ec0e7937e1ee7e28 Mon Sep 17 00:00:00 2001 From: brobert Date: Sun, 12 Oct 2025 23:38:41 +0200 Subject: [PATCH] fix: normalizar DB_PATH y DATA_DIR a rutas absolutas y esperar tablas Co-authored-by: aider (openrouter/openai/gpt-5) --- apps/web/src/lib/server/env.ts | 2 +- startup.sh | 41 ++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/apps/web/src/lib/server/env.ts b/apps/web/src/lib/server/env.ts index 0ce9dfd..68f090c 100644 --- a/apps/web/src/lib/server/env.ts +++ b/apps/web/src/lib/server/env.ts @@ -13,7 +13,7 @@ export function resolveDbAbsolutePath(filename: string = 'tasks.db'): string { if (dbPathEnv) { return resolve(dbPathEnv); } - const dataDir = env.DATA_DIR ? String(env.DATA_DIR) : 'data'; + const dataDir = env.DATA_DIR ? String(env.DATA_DIR) : '/app/data'; return resolve(join(dataDir, filename)); } diff --git a/startup.sh b/startup.sh index f188e53..0866318 100644 --- a/startup.sh +++ b/startup.sh @@ -1,10 +1,51 @@ #!/bin/bash set -euo pipefail +# Normalizar rutas de DB a absolutas para que bot y web apunten al mismo archivo +if [ -n "${DB_PATH:-}" ]; then + # readlink -f resuelve a ruta absoluta y elimina ./, ../, etc. + DB_PATH="$(readlink -f "$DB_PATH")" || true + export DB_PATH +else + DATA_DIR="${DATA_DIR:-/app/data}" + DATA_DIR="$(readlink -f "$DATA_DIR")" || true + export DATA_DIR +fi + +# Determinar archivo de base de datos para esperas +if [ -n "${DB_PATH:-}" ]; then + DB_FILE="$DB_PATH" +else + DB_FILE="${DATA_DIR:-/app/data}/tasks.db" +fi + # Arranca el bot en segundo plano (puerto 3007 por defecto) BOT_PORT="${BOT_PORT:-3007}" PORT="$BOT_PORT" bun run index.ts & +# Esperar a que exista el archivo de DB (máx ~30s) +echo "[startup] Esperando a que exista la base de datos en: $DB_FILE" +for i in $(seq 1 150); do + if [ -f "$DB_FILE" ]; then break; fi + sleep 0.2 +done + +# Esperar a que las tablas de auth estén creadas por las migraciones del bot (máx ~30s) +if command -v sqlite3 >/dev/null 2>&1; then + echo "[startup] Verificando tablas de autenticación (web_tokens, web_sessions)..." + for i in $(seq 1 150); do + if [ -f "$DB_FILE" ]; then + HAS_AUTH=$(sqlite3 "$DB_FILE" "SELECT 1 FROM sqlite_master WHERE type='table' AND name IN ('web_tokens','web_sessions') LIMIT 1;" || true) + if [ "$HAS_AUTH" = "1" ]; then + break + fi + fi + sleep 0.2 + done +else + echo "[startup] sqlite3 no disponible; se omite verificación de tablas (continuando)." +fi + # Arranca la web (SvelteKit) en segundo plano en el puerto 3008 WEB_PORT="${WEB_PORT:-3008}" pushd apps/web >/dev/null