系统安装, 写入数据库配置前, 测试连接是否成功

pull/21/merge
ouqiang 2017-04-03 11:23:21 +08:00
parent beefe59858
commit 6fc6a0d65d
3 changed files with 60 additions and 31 deletions

View File

@ -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)

View File

@ -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
}

View File

@ -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
}