[change] optimize the application initializer

This commit is contained in:
Max 2023-04-08 12:05:53 +08:00
parent 8ffb843495
commit 0317b6558f
6 changed files with 125 additions and 106 deletions

View file

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

View file

@ -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 关闭日志

View file

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

View file

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

View file

@ -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 != "" {

View file

@ -137,6 +137,7 @@ func Complete() {
// Stop stop the studio api server
func Stop() {
engine.Unload()
shutdown <- true
}