fix: 发布产物自包含数据库迁移资源,修复 macOS DMG 安装后无法启动
使用 go:embed 嵌入迁移 SQL 到二进制,移除 runtime.Caller 源码路径依赖, server 和 desktop 发布产物均可在无源码目录环境下完成数据库初始化和迁移。
This commit is contained in:
31
backend/migrations/embed.go
Normal file
31
backend/migrations/embed.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package migrations
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
|
||||
"github.com/pressly/goose/v3"
|
||||
)
|
||||
|
||||
//go:embed sqlite/*.sql mysql/*.sql
|
||||
var FS embed.FS
|
||||
|
||||
func ForDriver(driver string) (goose.Dialect, fs.FS, error) {
|
||||
switch driver {
|
||||
case "sqlite":
|
||||
subFS, err := fs.Sub(FS, "sqlite")
|
||||
if err != nil {
|
||||
return goose.DialectSQLite3, nil, fmt.Errorf("SQLite 迁移资源不可用: %w", err)
|
||||
}
|
||||
return goose.DialectSQLite3, subFS, nil
|
||||
case "mysql":
|
||||
subFS, err := fs.Sub(FS, "mysql")
|
||||
if err != nil {
|
||||
return goose.DialectMySQL, nil, fmt.Errorf("MySQL 迁移资源不可用: %w", err)
|
||||
}
|
||||
return goose.DialectMySQL, subFS, nil
|
||||
default:
|
||||
return goose.DialectSQLite3, nil, fmt.Errorf("不支持的数据库驱动: %s,仅支持 sqlite 或 mysql", driver)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user