Feat: Decide whether to do database migration based on version.lock

This commit is contained in:
HFO4
2019-11-09 19:04:48 +08:00
parent c5493fd1f1
commit e858cbe2cf
18 changed files with 127 additions and 26 deletions

View File

@@ -1,14 +1,31 @@
package model
import (
"Cloudreve/pkg/util"
"cloudreve/pkg/conf"
"cloudreve/pkg/util"
"github.com/jinzhu/gorm"
"github.com/mcuadros/go-version"
"io/ioutil"
)
//执行数据迁移
func migration() {
// 检查 version.lock 确认是否需要执行迁移
// Debug 模式下一定会执行迁移
if !conf.SystemConfig.Debug {
if util.Exists("version.lock") {
versionLock, _ := ioutil.ReadFile("version.lock")
if version.Compare(string(versionLock), conf.BackendVersion, "=") {
util.Log().Info("后端版本匹配,跳过数据库迁移")
return
}
}
}
util.Log().Info("开始进行数据库自动迁移...")
// 自动迁移模式
DB.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{})
DB.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{}, &Setting{})
// 添加初始用户
_, err := GetUser(1)
@@ -29,4 +46,10 @@ func migration() {
}
}
// 迁移完毕后写入版本锁 version.lock
err = conf.WriteVersionLock()
if err != nil {
util.Log().Warning("无法写入版本控制锁 version.lock, ", err)
}
}