fix(db): ensure sqlite data directory exists before opening database

This commit is contained in:
ryan
2026-08-28 15:42:24 +08:00
parent 692b4b4851
commit 3df621637f
@@ -5,10 +5,14 @@ package database
import ( import (
"context" "context"
"fmt"
"log" "log"
"net" "net"
"net/url" "net/url"
"os"
"path/filepath"
"strconv" "strconv"
"strings"
"time" "time"
"github.com/glebarez/sqlite" "github.com/glebarez/sqlite"
@@ -40,6 +44,14 @@ func initSQLite() (*gorm.DB, error) {
sqlitePath = "./data/wavelet.db" sqlitePath = "./data/wavelet.db"
} }
if sqlitePath != ":memory:" && !strings.HasPrefix(sqlitePath, "file:") {
if dir := filepath.Dir(sqlitePath); dir != "" && dir != "." {
if err := os.MkdirAll(dir, 0755); err != nil {
return nil, fmt.Errorf("create sqlite directory %q failed: %w", dir, err)
}
}
}
targetDB, err := gorm.Open(sqlite.Open(sqlitePath), &gorm.Config{ targetDB, err := gorm.Open(sqlite.Open(sqlitePath), &gorm.Config{
DisableForeignKeyConstraintWhenMigrating: true, DisableForeignKeyConstraintWhenMigrating: true,
Logger: &gormZapLogger{ Logger: &gormZapLogger{