[change] optimize the application initializer
This commit is contained in:
parent
8ffb843495
commit
0317b6558f
6 changed files with 125 additions and 106 deletions
10
cmd/start.go
10
cmd/start.go
|
|
@ -122,14 +122,15 @@ var startCmd = &cobra.Command{
|
|||
|
||||
err = studio.Load(config.Conf)
|
||||
if err != nil {
|
||||
fmt.Println(color.RedString(L("Studio Load: %s"), err.Error()))
|
||||
os.Exit(2)
|
||||
// fmt.Println(color.RedString(L("Studio Load: %s"), err.Error()))
|
||||
log.Error("Studio Load: %s", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
err := studio.Start(config.Conf)
|
||||
if err != nil {
|
||||
fmt.Println(color.RedString(L("Studio Start: %s"), err.Error()))
|
||||
os.Exit(2)
|
||||
log.Error("Studio Start: %s", err.Error())
|
||||
return
|
||||
}
|
||||
}()
|
||||
defer studio.Stop()
|
||||
|
|
@ -140,7 +141,6 @@ var startCmd = &cobra.Command{
|
|||
printConnectors(false)
|
||||
printStores(false)
|
||||
printStudio(false, host)
|
||||
|
||||
}
|
||||
|
||||
// Start Tasks
|
||||
|
|
|
|||
|
|
@ -45,16 +45,16 @@ func LoadFrom(envfile string) Config {
|
|||
|
||||
file, err := filepath.Abs(envfile)
|
||||
if err != nil {
|
||||
// log.Warn("Can't load env file. %s", err.Error())
|
||||
return Load()
|
||||
cfg := Load()
|
||||
ReloadLog()
|
||||
return cfg
|
||||
}
|
||||
|
||||
// load from env
|
||||
godotenv.Overload(file)
|
||||
// if err != nil {
|
||||
// // log.Warn("Can't load env file. %s", err.Error())
|
||||
// }
|
||||
|
||||
return Load()
|
||||
cfg := Load()
|
||||
ReloadLog()
|
||||
return cfg
|
||||
}
|
||||
|
||||
// Load the config
|
||||
|
|
@ -131,34 +131,36 @@ func ReloadLog() {
|
|||
|
||||
// OpenLog 打开日志
|
||||
func OpenLog() {
|
||||
if Conf.Log != "" {
|
||||
|
||||
if !filepath.IsAbs(Conf.Log) {
|
||||
Conf.Log = filepath.Join(Conf.Root, Conf.Log)
|
||||
}
|
||||
|
||||
logfile, err := filepath.Abs(Conf.Log)
|
||||
if err != nil {
|
||||
log.With(log.F{"file": logfile}).Error(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
logpath := filepath.Dir(logfile)
|
||||
if _, err := os.Stat(logpath); os.IsNotExist(err) {
|
||||
if err := os.MkdirAll(logpath, os.ModePerm); err != nil {
|
||||
log.With(log.F{"file": logfile}).Error(err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
LogOutput, err = os.OpenFile(logfile, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
|
||||
if err != nil {
|
||||
log.With(log.F{"file": logfile}).Error(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
log.SetOutput(LogOutput)
|
||||
gin.DefaultWriter = io.MultiWriter(LogOutput)
|
||||
if Conf.Log == "" {
|
||||
Conf.Log = filepath.Join(Conf.Root, "logs", "application.log")
|
||||
}
|
||||
|
||||
if !filepath.IsAbs(Conf.Log) {
|
||||
Conf.Log = filepath.Join(Conf.Root, Conf.Log)
|
||||
}
|
||||
|
||||
logfile, err := filepath.Abs(Conf.Log)
|
||||
if err != nil {
|
||||
log.With(log.F{"file": logfile}).Error(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
logpath := filepath.Dir(logfile)
|
||||
if _, err := os.Stat(logpath); os.IsNotExist(err) {
|
||||
if err := os.MkdirAll(logpath, os.ModePerm); err != nil {
|
||||
log.With(log.F{"file": logfile}).Error(err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
LogOutput, err = os.OpenFile(logfile, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
|
||||
if err != nil {
|
||||
log.With(log.F{"file": logfile}).Error(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
log.SetOutput(LogOutput)
|
||||
gin.DefaultWriter = io.MultiWriter(LogOutput)
|
||||
}
|
||||
|
||||
// CloseLog 关闭日志
|
||||
|
|
|
|||
|
|
@ -50,7 +50,6 @@ func Load(cfg config.Config) (err error) {
|
|||
err = loadApp(cfg.AppSource)
|
||||
if err != nil {
|
||||
printErr(cfg.Mode, "Load Application", err)
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Load Certs
|
||||
|
|
|
|||
|
|
@ -5,22 +5,24 @@ import (
|
|||
"net"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/yaoapp/xun/capsule"
|
||||
"github.com/yaoapp/yao/config"
|
||||
)
|
||||
|
||||
// Check setup programe
|
||||
// Check if the app is installed
|
||||
// true: start setup, false: start app
|
||||
func Check() bool {
|
||||
|
||||
root := appRoot()
|
||||
|
||||
appfile := filepath.Join(root, "app.yao")
|
||||
if _, err := os.Stat(appfile); err != nil && os.IsNotExist(err) {
|
||||
// check app source
|
||||
if !appSourceExists() {
|
||||
return true
|
||||
}
|
||||
|
||||
// check env file
|
||||
root := appRoot()
|
||||
envfile := filepath.Join(root, ".env")
|
||||
if _, err := os.Stat(envfile); err != nil && os.IsNotExist(err) {
|
||||
cfg, err := getConfig()
|
||||
|
|
@ -32,6 +34,29 @@ func Check() bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func appSourceExists() bool {
|
||||
|
||||
appsource := appSource()
|
||||
|
||||
if strings.HasSuffix(appsource, ".pkg") || strings.HasPrefix(appsource, "bin:") {
|
||||
return true
|
||||
}
|
||||
|
||||
// check app.yao/app.json/app.jsonc
|
||||
root := appRoot()
|
||||
appfiles := []string{"app.yao", "app.json", "app.jsonc"}
|
||||
exist := false
|
||||
for _, appfile := range appfiles {
|
||||
appfile = filepath.Join(root, appfile)
|
||||
if _, err := os.Stat(appfile); err == nil {
|
||||
exist = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return exist
|
||||
}
|
||||
|
||||
// ValidateHosting host ports
|
||||
func ValidateHosting(option map[string]string) error {
|
||||
if option["YAO_PORT"] == "" {
|
||||
|
|
@ -87,6 +112,10 @@ func ValidateDB(option map[string]string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func appSource() string {
|
||||
return os.Getenv("YAO_APP_SOURCE")
|
||||
}
|
||||
|
||||
func appRoot() string {
|
||||
|
||||
root := os.Getenv("YAO_ROOT")
|
||||
|
|
@ -117,30 +146,32 @@ func getConfig() (config.Config, error) {
|
|||
|
||||
func hasInstalled(cfg config.Config) bool {
|
||||
|
||||
switch cfg.DB.Driver {
|
||||
|
||||
case "sqlite3":
|
||||
if cfg.DB.Primary != nil && len(cfg.DB.Primary) > 0 {
|
||||
|
||||
dbfile, err := filepath.Abs(cfg.DB.Primary[0])
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
if _, err := os.Stat(dbfile); err != nil && os.IsNotExist(err) {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
break
|
||||
|
||||
case "mysql":
|
||||
if cfg.DB.Primary != nil && len(cfg.DB.Primary) > 0 {
|
||||
return true
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
return false
|
||||
|
||||
// switch cfg.DB.Driver {
|
||||
|
||||
// case "sqlite3":
|
||||
// if cfg.DB.Primary != nil && len(cfg.DB.Primary) > 0 {
|
||||
|
||||
// dbfile, err := filepath.Abs(cfg.DB.Primary[0])
|
||||
// if err != nil {
|
||||
// return false
|
||||
// }
|
||||
|
||||
// if _, err := os.Stat(dbfile); err != nil && os.IsNotExist(err) {
|
||||
// return false
|
||||
// }
|
||||
|
||||
// return false
|
||||
// }
|
||||
// break
|
||||
|
||||
// case "mysql":
|
||||
// if cfg.DB.Primary != nil && len(cfg.DB.Primary) > 0 {
|
||||
// return true
|
||||
// }
|
||||
// break
|
||||
// }
|
||||
|
||||
// return false
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,10 +5,12 @@ import (
|
|||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/yaoapp/gou/model"
|
||||
"github.com/yaoapp/gou/process"
|
||||
"github.com/yaoapp/kun/log"
|
||||
"github.com/yaoapp/yao/config"
|
||||
"github.com/yaoapp/yao/data"
|
||||
"github.com/yaoapp/yao/engine"
|
||||
"github.com/yaoapp/yao/widgets/app"
|
||||
|
|
@ -98,12 +100,28 @@ func Install(payload map[string]map[string]string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
err = makeMigrate(root)
|
||||
cfg, err := getConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = makeSetup(root)
|
||||
// Load engine
|
||||
err = engine.Load(cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
engine.Unload()
|
||||
time.Sleep(time.Millisecond * 200)
|
||||
}()
|
||||
|
||||
// Migrage & Setup
|
||||
err = makeMigrate(root, cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = makeSetup(root, cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -206,16 +224,6 @@ func makeDirs(root string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
err = os.MkdirAll(filepath.Join(root, "services"), os.ModePerm)
|
||||
if err != nil && !os.IsExist(err) {
|
||||
return err
|
||||
}
|
||||
|
||||
err = os.MkdirAll(filepath.Join(root, "studio"), os.ModePerm)
|
||||
if err != nil && !os.IsExist(err) {
|
||||
return err
|
||||
}
|
||||
|
||||
err = os.MkdirAll(filepath.Join(root, "logs"), os.ModePerm)
|
||||
if err != nil && !os.IsExist(err) {
|
||||
return err
|
||||
|
|
@ -231,9 +239,7 @@ func makeDirs(root string) error {
|
|||
|
||||
func makeInit(root string) error {
|
||||
|
||||
// if the app.json exist ignore
|
||||
file := filepath.Join("app.json")
|
||||
if _, err := os.Stat(filepath.Join(root, file)); err == nil { // exists
|
||||
if appSourceExists() {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
@ -264,17 +270,7 @@ func makeInit(root string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func makeMigrate(root string) error {
|
||||
|
||||
cfg, err := getConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = engine.Load(cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
func makeMigrate(root string, cfg config.Config) error {
|
||||
|
||||
// Do Stuff Here
|
||||
for _, mod := range model.Models {
|
||||
|
|
@ -297,17 +293,7 @@ func makeMigrate(root string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func makeSetup(root string) error {
|
||||
|
||||
cfg, err := getConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = engine.Load(cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
func makeSetup(root string, cfg config.Config) error {
|
||||
|
||||
if app.Setting != nil && app.Setting.Setup != "" {
|
||||
|
||||
|
|
|
|||
|
|
@ -137,6 +137,7 @@ func Complete() {
|
|||
|
||||
// Stop stop the studio api server
|
||||
func Stop() {
|
||||
engine.Unload()
|
||||
shutdown <- true
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue