From 6fc6a0d65d0b5ade9fff054043518e42e7662e81 Mon Sep 17 00:00:00 2001 From: ouqiang Date: Mon, 3 Apr 2017 11:23:21 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=AE=89=E8=A3=85,=20?= =?UTF-8?q?=E5=86=99=E5=85=A5=E6=95=B0=E6=8D=AE=E5=BA=93=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=89=8D,=20=E6=B5=8B=E8=AF=95=E8=BF=9E=E6=8E=A5=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/model.go | 34 ++++++++-------------------------- modules/app/app.go | 29 +++++++++++++++++++++++++++-- routers/install/install.go | 28 +++++++++++++++++++++++++--- 3 files changed, 60 insertions(+), 31 deletions(-) diff --git a/models/model.go b/models/model.go index 86f4227..c036b28 100644 --- a/models/model.go +++ b/models/model.go @@ -5,7 +5,6 @@ import ( _ "github.com/go-sql-driver/mysql" "github.com/go-xorm/core" "github.com/go-xorm/xorm" - "github.com/ouqiang/cron-scheduler/modules/setting" "gopkg.in/macaron.v1" "strings" "time" @@ -31,8 +30,7 @@ const ( ) // 创建Db -func CreateDb(configFile string) *xorm.Engine { - config := getDbConfig(configFile) +func CreateDb(config map[string]string) *xorm.Engine { dsn := getDbEngineDSN(config["engine"], config) engine, err := xorm.NewEngine(config["engine"], dsn) if err != nil { @@ -54,6 +52,13 @@ func CreateDb(configFile string) *xorm.Engine { return engine } +// 创建临时数据库连接 +func CreateTmpDb(config map[string]string) (*xorm.Engine, error) { + dsn := getDbEngineDSN(config["engine"], config) + + return xorm.NewEngine(config["engine"], dsn) +} + // 获取数据库引擎DSN mysql,sqlite func getDbEngineDSN(engine string, config map[string]string) string { engine = strings.ToLower(engine) @@ -72,29 +77,6 @@ func getDbEngineDSN(engine string, config map[string]string) string { return dsn } -// 获取数据库配置 -func getDbConfig(configFile string) map[string]string { - config, err := setting.Read(configFile) - if err != nil { - panic(err) - } - section := config.Section("db") - if err != nil { - panic(err) - } - var db map[string]string = make(map[string]string) - db["user"] = section.Key("user").String() - db["password"] = section.Key("password").String() - db["host"] = section.Key("host").String() - db["port"] = section.Key("port").String() - db["database"] = section.Key("database").String() - db["charset"] = section.Key("charset").String() - db["prefix"] = section.Key("prefix").String() - db["engine"] = section.Key("engine").String() - - return db -} - // 定时ping, 防止因数据库超时设置被断开 func keepDbAlived(engine *xorm.Engine) { t := time.Tick(180 * time.Second) diff --git a/modules/app/app.go b/modules/app/app.go index 418a1fb..ce39ade 100644 --- a/modules/app/app.go +++ b/modules/app/app.go @@ -9,6 +9,7 @@ import ( "github.com/ouqiang/cron-scheduler/modules/crontask" "github.com/ouqiang/cron-scheduler/modules/utils" "github.com/ouqiang/cron-scheduler/service" + "github.com/ouqiang/cron-scheduler/modules/setting" ) var ( @@ -90,8 +91,9 @@ func InitResource() { } // 初始化DB -func InitDb() { - models.Db = models.CreateDb(AppConfig) +func InitDb() { + dbConfig := getDbConfig(AppConfig) + models.Db = models.CreateDb(dbConfig) } // 检测目录是否存在 @@ -106,3 +108,26 @@ func checkDirExists(path ...string) { } } } + +// 获取数据库配置 +func getDbConfig(configFile string) map[string]string { + config, err := setting.Read(configFile) + if err != nil { + panic(err) + } + section := config.Section("db") + if err != nil { + panic(err) + } + var db map[string]string = make(map[string]string) + db["user"] = section.Key("user").String() + db["password"] = section.Key("password").String() + db["host"] = section.Key("host").String() + db["port"] = section.Key("port").String() + db["database"] = section.Key("database").String() + db["charset"] = section.Key("charset").String() + db["prefix"] = section.Key("prefix").String() + db["engine"] = section.Key("engine").String() + + return db +} \ No newline at end of file diff --git a/routers/install/install.go b/routers/install/install.go index 362a259..9329ebb 100644 --- a/routers/install/install.go +++ b/routers/install/install.go @@ -38,16 +38,20 @@ func Show(ctx *macaron.Context) { func Install(ctx *macaron.Context, form InstallForm) string { json := utils.Json{} if app.Installed { - return json.Failure(utils.ResponseFailure, "系统已安装成功") + return json.Failure(utils.ResponseFailure, "系统已安装!") + } + err := testDbConnection(form) + if err != nil { + utils.RecordLog(err) + return json.Failure(utils.ResponseFailure, "数据库连接失败") } // 写入数据库配置 - err := writeConfig(form) + err = writeConfig(form) if err != nil { utils.RecordLog(err) return json.Failure(utils.ResponseFailure, "数据库配置写入文件失败") } - // 初始化Db app.InitDb() // 创建数据库表 migration := new(models.Migration) @@ -107,3 +111,21 @@ func createAdminUser(form InstallForm) error { return err } + +// 测试数据库连接 +func testDbConnection(form InstallForm) error { + var dbConfig map[string]string = make(map[string]string) + dbConfig["engine"] = form.DbType + dbConfig["host"] = form.DbHost + dbConfig["port"] = strconv.Itoa(form.DbPort) + dbConfig["user"] = form.DbUsername + dbConfig["password"] = form.DbPassword + dbConfig["charset"] = "utf8" + db, err := models.CreateTmpDb(dbConfig) + if err == nil { + db.Close() + } + + return err + +} \ No newline at end of file