mirror of
https://github.com/go-admin-team/go-admin.git
synced 2026-09-22 18:37:43 +00:00
opens is a map, so opens[c.Driver] on a driver this build does not carry returns a nil function, and gorm.Open calls it. The operator saw a nil dereference inside gorm with nothing naming the driver. sqlite3 is the case that bites: it needs cgo and is only compiled in under the sqlite3 build tag, so the same config file works on one binary and dies on another. Resolve the driver first and say which ones this build supports.
71 lines
1.8 KiB
Go
71 lines
1.8 KiB
Go
package database
|
|
|
|
import (
|
|
"time"
|
|
|
|
log "github.com/go-admin-team/go-admin-core/logger"
|
|
"github.com/go-admin-team/go-admin-core/sdk"
|
|
toolsConfig "github.com/go-admin-team/go-admin-core/sdk/config"
|
|
"github.com/go-admin-team/go-admin-core/sdk/pkg"
|
|
mycasbin "github.com/go-admin-team/go-admin-core/sdk/pkg/casbin"
|
|
toolsDB "github.com/go-admin-team/go-admin-core/tools/database"
|
|
. "github.com/go-admin-team/go-admin-core/tools/gorm/logger"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
"gorm.io/gorm/schema"
|
|
|
|
"go-admin/common/global"
|
|
)
|
|
|
|
// Setup 配置数据库
|
|
func Setup() {
|
|
for k := range toolsConfig.DatabasesConfig {
|
|
setupSimpleDatabase(k, toolsConfig.DatabasesConfig[k])
|
|
}
|
|
}
|
|
|
|
func setupSimpleDatabase(host string, c *toolsConfig.Database) {
|
|
if global.Driver == "" {
|
|
global.Driver = c.Driver
|
|
}
|
|
log.Infof("%s => %s", host, pkg.Green(c.Source))
|
|
registers := make([]toolsDB.ResolverConfigure, len(c.Registers))
|
|
for i := range c.Registers {
|
|
registers[i] = toolsDB.NewResolverConfigure(
|
|
c.Registers[i].Sources,
|
|
c.Registers[i].Replicas,
|
|
c.Registers[i].Policy,
|
|
c.Registers[i].Tables)
|
|
}
|
|
open, err := openerFor(c.Driver)
|
|
if err != nil {
|
|
log.Fatal(pkg.Red(err.Error()))
|
|
}
|
|
|
|
resolverConfig := toolsDB.NewConfigure(c.Source, c.MaxIdleConns, c.MaxOpenConns, c.ConnMaxIdleTime, c.ConnMaxLifeTime, registers)
|
|
db, err := resolverConfig.Init(&gorm.Config{
|
|
NamingStrategy: schema.NamingStrategy{
|
|
SingularTable: true,
|
|
},
|
|
Logger: New(
|
|
logger.Config{
|
|
SlowThreshold: time.Second,
|
|
Colorful: true,
|
|
LogLevel: logger.LogLevel(
|
|
log.DefaultLogger.Options().Level.LevelForGorm()),
|
|
},
|
|
),
|
|
}, open)
|
|
|
|
if err != nil {
|
|
log.Fatal(pkg.Red(c.Driver+" connect error :"), err)
|
|
} else {
|
|
log.Info(pkg.Green(c.Driver + " connect success !"))
|
|
}
|
|
|
|
e := mycasbin.Setup(db, "")
|
|
|
|
sdk.Runtime.SetDbByTenant(host, db)
|
|
sdk.Runtime.SetCasbinByTenant(host, e)
|
|
}
|