chore(web): auto-rebuild better-sqlite3 e valida permissão do SQLite
This commit is contained in:
parent
463c0aeccd
commit
16bc56ae18
1 changed files with 73 additions and 5 deletions
|
|
@ -9,12 +9,29 @@ cd /app
|
||||||
export BUN_INSTALL_CACHE_DIR="${BUN_INSTALL_CACHE_DIR:-/tmp/bun-cache}"
|
export BUN_INSTALL_CACHE_DIR="${BUN_INSTALL_CACHE_DIR:-/tmp/bun-cache}"
|
||||||
mkdir -p "$BUN_INSTALL_CACHE_DIR"
|
mkdir -p "$BUN_INSTALL_CACHE_DIR"
|
||||||
|
|
||||||
|
DB_PATH="/app/data/db.sqlite"
|
||||||
|
|
||||||
echo "[start-web] Using bun cache dir: $BUN_INSTALL_CACHE_DIR"
|
echo "[start-web] Using bun cache dir: $BUN_INSTALL_CACHE_DIR"
|
||||||
|
|
||||||
echo "[start-web] Using APP_DIR=$(pwd)"
|
echo "[start-web] Using APP_DIR=$(pwd)"
|
||||||
echo "[start-web] NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL:-}"
|
echo "[start-web] NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL:-}"
|
||||||
echo "[start-web] NEXT_PUBLIC_CONVEX_URL=${NEXT_PUBLIC_CONVEX_URL:-}"
|
echo "[start-web] NEXT_PUBLIC_CONVEX_URL=${NEXT_PUBLIC_CONVEX_URL:-}"
|
||||||
|
|
||||||
|
ensure_db_writable() {
|
||||||
|
mkdir -p "$(dirname "$DB_PATH")"
|
||||||
|
if [ ! -e "$DB_PATH" ]; then
|
||||||
|
touch "$DB_PATH" || true
|
||||||
|
chmod 660 "$DB_PATH" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
if ! touch "$DB_PATH" >/dev/null 2>&1; then
|
||||||
|
echo "[start-web] ERRO: não foi possível escrever em $DB_PATH (verifique permissões do volume /app/data)" >&2
|
||||||
|
ls -ld /app/data "$DB_PATH" >/dev/null 2>&1 || true
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_db_writable
|
||||||
|
|
||||||
# Ensure system deps for native modules (best-effort, idempotent)
|
# Ensure system deps for native modules (best-effort, idempotent)
|
||||||
if command -v apt-get >/dev/null 2>&1; then
|
if command -v apt-get >/dev/null 2>&1; then
|
||||||
if [ "${SKIP_APT_BOOTSTRAP:-false}" = "true" ]; then
|
if [ "${SKIP_APT_BOOTSTRAP:-false}" = "true" ]; then
|
||||||
|
|
@ -61,12 +78,63 @@ fi
|
||||||
|
|
||||||
# Rebuild native better-sqlite3 bindings for the current Node version
|
# Rebuild native better-sqlite3 bindings for the current Node version
|
||||||
if command -v npm >/dev/null 2>&1; then
|
if command -v npm >/dev/null 2>&1; then
|
||||||
|
check_better_sqlite3() {
|
||||||
|
node - <<'EOF'
|
||||||
|
const path = require("node:path")
|
||||||
|
try {
|
||||||
|
const pkgPath = require.resolve("better-sqlite3/package.json")
|
||||||
|
const pkg = require(pkgPath)
|
||||||
|
const binding = path.join(path.dirname(pkgPath), "build", "Release", "better_sqlite3.node")
|
||||||
|
require("better-sqlite3")
|
||||||
|
console.log(`[start-web] better-sqlite3 ok (v${pkg.version}) binding=${binding}`)
|
||||||
|
process.exit(0)
|
||||||
|
} catch (error) {
|
||||||
|
console.error("[start-web] better-sqlite3 load failed:", error?.message || error)
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
rebuild_and_repin_sqlite() {
|
||||||
|
echo "[start-web] rebuilding better-sqlite3 para a runtime atual"
|
||||||
|
npm rebuild better-sqlite3 --build-from-source >/dev/null 2>&1 || {
|
||||||
|
echo "[start-web] rebuild falhou; continuando com bindings existentes" >&2
|
||||||
|
}
|
||||||
|
node - <<'EOF'
|
||||||
|
const fs = require("node:fs")
|
||||||
|
const path = require("node:path")
|
||||||
|
try {
|
||||||
|
const pkgPath = require.resolve("better-sqlite3/package.json")
|
||||||
|
const pkgDir = path.dirname(pkgPath)
|
||||||
|
const pkg = require(pkgPath)
|
||||||
|
const built = path.join(pkgDir, "build", "Release", "better_sqlite3.node")
|
||||||
|
const store = path.join(process.cwd(), "node_modules", ".bun", `better-sqlite3@${pkg.version}`, "node_modules", "better-sqlite3", "build", "Release", "better_sqlite3.node")
|
||||||
|
fs.mkdirSync(path.dirname(store), { recursive: true })
|
||||||
|
fs.copyFileSync(built, store)
|
||||||
|
console.log(`[start-web] better-sqlite3 (v${pkg.version}) copiado para store bun: ${store}`)
|
||||||
|
} catch (error) {
|
||||||
|
console.error("[start-web] não foi possível copiar binding para .bun store:", error?.message || error)
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
if [ "${SKIP_SQLITE_REBUILD:-false}" = "true" ]; then
|
if [ "${SKIP_SQLITE_REBUILD:-false}" = "true" ]; then
|
||||||
echo "[start-web] skipping better-sqlite3 rebuild (SKIP_SQLITE_REBUILD=true)"
|
echo "[start-web] SKIP_SQLITE_REBUILD=true; tentando usar bindings existentes"
|
||||||
else
|
if ! check_better_sqlite3; then
|
||||||
echo "[start-web] rebuilding better-sqlite3 for current Node runtime"
|
echo "[start-web] bindings inválidos; forçando rebuild mesmo com SKIP_SQLITE_REBUILD=true"
|
||||||
(npm rebuild better-sqlite3 >/dev/null 2>&1 && echo "[start-web] better-sqlite3 rebuilt") || echo "[start-web] rebuild skipped (using existing bindings)"
|
rebuild_and_repin_sqlite
|
||||||
|
check_better_sqlite3 || {
|
||||||
|
echo "[start-web] ERRO: better-sqlite3 continua inválido após rebuild" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
|
} else {
|
||||||
|
rebuild_and_repin_sqlite
|
||||||
|
check_better_sqlite3 || {
|
||||||
|
echo "[start-web] ERRO: better-sqlite3 inválido após rebuild" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Bun keeps its store in node_modules/.bun by default; ensure it exists and is writable
|
# Bun keeps its store in node_modules/.bun by default; ensure it exists and is writable
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue