mirror of https://github.com/beego/bee.git
fix api hprose project
This commit is contained in:
parent
8ebc0adfd1
commit
0163d03646
|
@ -16,8 +16,10 @@ package apiapp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/beego/bee/logger/colors"
|
||||||
"os"
|
"os"
|
||||||
path "path/filepath"
|
path "path/filepath"
|
||||||
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/beego/bee/cmd/commands"
|
"github.com/beego/bee/cmd/commands"
|
||||||
|
@ -35,7 +37,7 @@ var CmdApiapp = &commands.Command{
|
||||||
The command 'api' creates a Beego API application.
|
The command 'api' creates a Beego API application.
|
||||||
|
|
||||||
{{"Example:"|bold}}
|
{{"Example:"|bold}}
|
||||||
$ bee api [appname] [-tables=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
|
$ bee api [appname] [-tables=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"] [-module=true] [-beego=v1.12.1]
|
||||||
|
|
||||||
If 'conn' argument is empty, the command will generate an example API application. Otherwise the command
|
If 'conn' argument is empty, the command will generate an example API application. Otherwise the command
|
||||||
will connect to your database and generate models based on the existing tables.
|
will connect to your database and generate models based on the existing tables.
|
||||||
|
@ -43,6 +45,7 @@ var CmdApiapp = &commands.Command{
|
||||||
The command 'api' creates a folder named [appname] with the following structure:
|
The command 'api' creates a folder named [appname] with the following structure:
|
||||||
|
|
||||||
├── main.go
|
├── main.go
|
||||||
|
├── go.mod
|
||||||
├── {{"conf"|foldername}}
|
├── {{"conf"|foldername}}
|
||||||
│ └── app.conf
|
│ └── app.conf
|
||||||
├── {{"controllers"|foldername}}
|
├── {{"controllers"|foldername}}
|
||||||
|
@ -103,6 +106,13 @@ func main() {
|
||||||
beego.Run()
|
beego.Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
`
|
||||||
|
var goMod = `
|
||||||
|
module %s
|
||||||
|
|
||||||
|
go %s
|
||||||
|
|
||||||
|
require github.com/astaxie/beego %s
|
||||||
`
|
`
|
||||||
|
|
||||||
var apirouter = `// @APIVersion 1.0.0
|
var apirouter = `// @APIVersion 1.0.0
|
||||||
|
@ -533,11 +543,15 @@ func TestGet(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
`
|
`
|
||||||
|
var module utils.DocValue
|
||||||
|
var beegoVersion utils.DocValue
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
CmdApiapp.Flag.Var(&generate.Tables, "tables", "List of table names separated by a comma.")
|
CmdApiapp.Flag.Var(&generate.Tables, "tables", "List of table names separated by a comma.")
|
||||||
CmdApiapp.Flag.Var(&generate.SQLDriver, "driver", "Database driver. Either mysql, postgres or sqlite.")
|
CmdApiapp.Flag.Var(&generate.SQLDriver, "driver", "Database driver. Either mysql, postgres or sqlite.")
|
||||||
CmdApiapp.Flag.Var(&generate.SQLConn, "conn", "Connection string used by the driver to connect to a database instance.")
|
CmdApiapp.Flag.Var(&generate.SQLConn, "conn", "Connection string used by the driver to connect to a database instance.")
|
||||||
|
CmdApiapp.Flag.Var(&module, "module", "Support go modules")
|
||||||
|
CmdApiapp.Flag.Var(&beegoVersion, "beego", "set beego version,only take effect by -module=true")
|
||||||
commands.AvailableCommands = append(commands.AvailableCommands, CmdApiapp)
|
commands.AvailableCommands = append(commands.AvailableCommands, CmdApiapp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -548,14 +562,38 @@ func createAPI(cmd *commands.Command, args []string) int {
|
||||||
beeLogger.Log.Fatal("Argument [appname] is missing")
|
beeLogger.Log.Fatal("Argument [appname] is missing")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(args) > 1 {
|
if len(args) >= 2 {
|
||||||
err := cmd.Flag.Parse(args[1:])
|
cmd.Flag.Parse(args[1:])
|
||||||
|
} else {
|
||||||
|
module = "false"
|
||||||
|
}
|
||||||
|
appPath := ``
|
||||||
|
packPath := ``
|
||||||
|
var err error
|
||||||
|
if module != `true` {
|
||||||
|
beeLogger.Log.Info("generate api project support GOPATH")
|
||||||
|
version.ShowShortVersionBanner()
|
||||||
|
appPath, packPath, err = utils.CheckEnv(args[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
beeLogger.Log.Error(err.Error())
|
beeLogger.Log.Fatalf("%s", err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
beeLogger.Log.Info("generate api project support go modules.")
|
||||||
|
appPath = path.Join(utils.GetBeeWorkPath(), args[0])
|
||||||
|
packPath = args[0]
|
||||||
|
if beegoVersion.String() == `` {
|
||||||
|
beegoVersion.Set(`v1.12.1`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if utils.IsExist(appPath) {
|
||||||
|
beeLogger.Log.Errorf(colors.Bold("Application '%s' already exists"), appPath)
|
||||||
|
beeLogger.Log.Warn(colors.Bold("Do you want to overwrite it? [Yes|No] "))
|
||||||
|
if !utils.AskForConfirmation() {
|
||||||
|
os.Exit(2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
appPath, packPath, err := utils.CheckEnv(args[0])
|
|
||||||
appName := path.Base(args[0])
|
appName := path.Base(args[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
beeLogger.Log.Fatalf("%s", err)
|
beeLogger.Log.Fatalf("%s", err)
|
||||||
|
@ -567,6 +605,10 @@ func createAPI(cmd *commands.Command, args []string) int {
|
||||||
beeLogger.Log.Info("Creating API...")
|
beeLogger.Log.Info("Creating API...")
|
||||||
|
|
||||||
os.MkdirAll(appPath, 0755)
|
os.MkdirAll(appPath, 0755)
|
||||||
|
if module == `true` { //generate first for calc model name
|
||||||
|
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", path.Join(appPath, "go.mod"), "\x1b[0m")
|
||||||
|
utils.WriteToFile(path.Join(appPath, "go.mod"), fmt.Sprintf(goMod, packPath, runtime.Version()[2:], beegoVersion.String()))
|
||||||
|
}
|
||||||
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", appPath, "\x1b[0m")
|
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", appPath, "\x1b[0m")
|
||||||
os.Mkdir(path.Join(appPath, "conf"), 0755)
|
os.Mkdir(path.Join(appPath, "conf"), 0755)
|
||||||
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", path.Join(appPath, "conf"), "\x1b[0m")
|
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", path.Join(appPath, "conf"), "\x1b[0m")
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package hprose
|
package hprose
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/beego/bee/logger/colors"
|
||||||
"os"
|
"os"
|
||||||
|
"runtime"
|
||||||
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"path"
|
"path"
|
||||||
|
@ -11,7 +13,7 @@ import (
|
||||||
"github.com/beego/bee/cmd/commands/api"
|
"github.com/beego/bee/cmd/commands/api"
|
||||||
"github.com/beego/bee/cmd/commands/version"
|
"github.com/beego/bee/cmd/commands/version"
|
||||||
"github.com/beego/bee/generate"
|
"github.com/beego/bee/generate"
|
||||||
beeLogger "github.com/beego/bee/logger"
|
"github.com/beego/bee/logger"
|
||||||
"github.com/beego/bee/utils"
|
"github.com/beego/bee/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -24,7 +26,7 @@ var CmdHproseapp = &commands.Command{
|
||||||
|
|
||||||
{{"To scaffold out your application, use:"|bold}}
|
{{"To scaffold out your application, use:"|bold}}
|
||||||
|
|
||||||
$ bee hprose [appname] [-tables=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
|
$ bee hprose [appname] [-tables=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"] [-module=true] [-beego=v1.12.1]
|
||||||
|
|
||||||
If 'conn' is empty, the command will generate a sample application. Otherwise the command
|
If 'conn' is empty, the command will generate a sample application. Otherwise the command
|
||||||
will connect to your database and generate models based on the existing tables.
|
will connect to your database and generate models based on the existing tables.
|
||||||
|
@ -32,6 +34,7 @@ var CmdHproseapp = &commands.Command{
|
||||||
The command 'hprose' creates a folder named [appname] with the following structure:
|
The command 'hprose' creates a folder named [appname] with the following structure:
|
||||||
|
|
||||||
├── main.go
|
├── main.go
|
||||||
|
├── go.mod
|
||||||
├── {{"conf"|foldername}}
|
├── {{"conf"|foldername}}
|
||||||
│ └── app.conf
|
│ └── app.conf
|
||||||
└── {{"models"|foldername}}
|
└── {{"models"|foldername}}
|
||||||
|
@ -42,10 +45,23 @@ var CmdHproseapp = &commands.Command{
|
||||||
Run: createhprose,
|
Run: createhprose,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var goMod = `
|
||||||
|
module %s
|
||||||
|
|
||||||
|
go %s
|
||||||
|
|
||||||
|
require github.com/astaxie/beego %s
|
||||||
|
`
|
||||||
|
|
||||||
|
var module utils.DocValue
|
||||||
|
var beegoVersion utils.DocValue
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
CmdHproseapp.Flag.Var(&generate.Tables, "tables", "List of table names separated by a comma.")
|
CmdHproseapp.Flag.Var(&generate.Tables, "tables", "List of table names separated by a comma.")
|
||||||
CmdHproseapp.Flag.Var(&generate.SQLDriver, "driver", "Database driver. Either mysql, postgres or sqlite.")
|
CmdHproseapp.Flag.Var(&generate.SQLDriver, "driver", "Database driver. Either mysql, postgres or sqlite.")
|
||||||
CmdHproseapp.Flag.Var(&generate.SQLConn, "conn", "Connection string used by the driver to connect to a database instance.")
|
CmdHproseapp.Flag.Var(&generate.SQLConn, "conn", "Connection string used by the driver to connect to a database instance.")
|
||||||
|
CmdHproseapp.Flag.Var(&module, "module", "Support go modules")
|
||||||
|
CmdHproseapp.Flag.Var(&beegoVersion, "beego", "set beego version,only take effect by -module=true")
|
||||||
commands.AvailableCommands = append(commands.AvailableCommands, CmdHproseapp)
|
commands.AvailableCommands = append(commands.AvailableCommands, CmdHproseapp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,16 +76,49 @@ func createhprose(cmd *commands.Command, args []string) int {
|
||||||
if len(args) > 1 {
|
if len(args) > 1 {
|
||||||
cmd.Flag.Parse(args[1:])
|
cmd.Flag.Parse(args[1:])
|
||||||
}
|
}
|
||||||
apppath, packpath, err := utils.CheckEnv(args[0])
|
|
||||||
if err != nil {
|
if len(args) >= 2 {
|
||||||
beeLogger.Log.Fatalf("%s", err)
|
cmd.Flag.Parse(args[1:])
|
||||||
|
} else {
|
||||||
|
module = "false"
|
||||||
}
|
}
|
||||||
|
apppath := ``
|
||||||
|
packpath := ``
|
||||||
|
var err error
|
||||||
|
if module != `true` {
|
||||||
|
beeLogger.Log.Info("generate api project support GOPATH")
|
||||||
|
version.ShowShortVersionBanner()
|
||||||
|
apppath, packpath, err = utils.CheckEnv(args[0])
|
||||||
|
if err != nil {
|
||||||
|
beeLogger.Log.Fatalf("%s", err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
beeLogger.Log.Info("generate api project support go modules.")
|
||||||
|
apppath = path.Join(utils.GetBeeWorkPath(), args[0])
|
||||||
|
packpath = args[0]
|
||||||
|
if beegoVersion.String() == `` {
|
||||||
|
beegoVersion.Set(`v1.12.1`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if utils.IsExist(apppath) {
|
||||||
|
beeLogger.Log.Errorf(colors.Bold("Application '%s' already exists"), apppath)
|
||||||
|
beeLogger.Log.Warn(colors.Bold("Do you want to overwrite it? [Yes|No] "))
|
||||||
|
if !utils.AskForConfirmation() {
|
||||||
|
os.Exit(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if generate.SQLDriver == "" {
|
if generate.SQLDriver == "" {
|
||||||
generate.SQLDriver = "mysql"
|
generate.SQLDriver = "mysql"
|
||||||
}
|
}
|
||||||
beeLogger.Log.Info("Creating Hprose application...")
|
beeLogger.Log.Info("Creating Hprose application...")
|
||||||
|
|
||||||
os.MkdirAll(apppath, 0755)
|
os.MkdirAll(apppath, 0755)
|
||||||
|
if module == `true` { //generate first for calc model name
|
||||||
|
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", path.Join(apppath, "go.mod"), "\x1b[0m")
|
||||||
|
utils.WriteToFile(path.Join(apppath, "go.mod"), fmt.Sprintf(goMod, packpath, runtime.Version()[2:], beegoVersion.String()))
|
||||||
|
}
|
||||||
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", apppath, "\x1b[0m")
|
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", apppath, "\x1b[0m")
|
||||||
os.Mkdir(path.Join(apppath, "conf"), 0755)
|
os.Mkdir(path.Join(apppath, "conf"), 0755)
|
||||||
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", path.Join(apppath, "conf"), "\x1b[0m")
|
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", path.Join(apppath, "conf"), "\x1b[0m")
|
||||||
|
|
|
@ -71,14 +71,14 @@ func init() {
|
||||||
func RunMigration(cmd *commands.Command, args []string) int {
|
func RunMigration(cmd *commands.Command, args []string) int {
|
||||||
currpath, _ := os.Getwd()
|
currpath, _ := os.Getwd()
|
||||||
|
|
||||||
gps := utils.GetGOPATHs()
|
//gps := utils.GetGOPATHs()
|
||||||
if len(gps) == 0 {
|
//if len(gps) == 0 {
|
||||||
beeLogger.Log.Fatal("GOPATH environment variable is not set or empty")
|
// beeLogger.Log.Fatal("GOPATH environment variable is not set or empty")
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
gopath := gps[0]
|
//gopath := gps[0]
|
||||||
|
//
|
||||||
beeLogger.Log.Debugf("GOPATH: %s", utils.FILE(), utils.LINE(), gopath)
|
//beeLogger.Log.Debugf("GOPATH: %s", utils.FILE(), utils.LINE(), gopath)
|
||||||
|
|
||||||
// Getting command line arguments
|
// Getting command line arguments
|
||||||
if len(args) != 0 {
|
if len(args) != 0 {
|
||||||
|
|
|
@ -302,6 +302,10 @@ func CreateApp(cmd *commands.Command, args []string) int {
|
||||||
beeLogger.Log.Info("Creating application...")
|
beeLogger.Log.Info("Creating application...")
|
||||||
|
|
||||||
os.MkdirAll(appPath, 0755)
|
os.MkdirAll(appPath, 0755)
|
||||||
|
if module == `true` {
|
||||||
|
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", path.Join(appPath, "go.mod"), "\x1b[0m")
|
||||||
|
utils.WriteToFile(path.Join(appPath, "go.mod"), fmt.Sprintf(goMod, packPath, runtime.Version()[2:], beegoVersion.String()))
|
||||||
|
}
|
||||||
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", appPath+string(path.Separator), "\x1b[0m")
|
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", appPath+string(path.Separator), "\x1b[0m")
|
||||||
os.Mkdir(path.Join(appPath, "conf"), 0755)
|
os.Mkdir(path.Join(appPath, "conf"), 0755)
|
||||||
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", path.Join(appPath, "conf")+string(path.Separator), "\x1b[0m")
|
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", path.Join(appPath, "conf")+string(path.Separator), "\x1b[0m")
|
||||||
|
@ -341,11 +345,6 @@ func CreateApp(cmd *commands.Command, args []string) int {
|
||||||
|
|
||||||
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", path.Join(appPath, "main.go"), "\x1b[0m")
|
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", path.Join(appPath, "main.go"), "\x1b[0m")
|
||||||
utils.WriteToFile(path.Join(appPath, "main.go"), strings.Replace(maingo, "{{.Appname}}", packPath, -1))
|
utils.WriteToFile(path.Join(appPath, "main.go"), strings.Replace(maingo, "{{.Appname}}", packPath, -1))
|
||||||
|
|
||||||
if module == `true` {
|
|
||||||
fmt.Fprintf(output, "\t%s%screate%s\t %s%s\n", "\x1b[32m", "\x1b[1m", "\x1b[21m", path.Join(appPath, "go.mod"), "\x1b[0m")
|
|
||||||
utils.WriteToFile(path.Join(appPath, "go.mod"), fmt.Sprintf(goMod, packPath, runtime.Version()[2:], beegoVersion.String()))
|
|
||||||
}
|
|
||||||
beeLogger.Log.Success("New application successfully created!")
|
beeLogger.Log.Success("New application successfully created!")
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,15 +15,17 @@
|
||||||
package generate
|
package generate
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
beeLogger "github.com/beego/bee/logger"
|
"github.com/beego/bee/logger"
|
||||||
"github.com/beego/bee/logger/colors"
|
"github.com/beego/bee/logger/colors"
|
||||||
"github.com/beego/bee/utils"
|
"github.com/beego/bee/utils"
|
||||||
_ "github.com/go-sql-driver/mysql"
|
_ "github.com/go-sql-driver/mysql"
|
||||||
|
@ -946,6 +948,37 @@ func getFileName(tbName string) (filename string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func getPackagePath(curpath string) (packpath string) {
|
func getPackagePath(curpath string) (packpath string) {
|
||||||
|
if os.Getenv(`GO111MODULE`) == `on` {
|
||||||
|
beeLogger.Log.Infof("GO111MODULE = on,curpath: %s", curpath)
|
||||||
|
gomodpath := filepath.Join(curpath, `go.mod`)
|
||||||
|
re, err := regexp.Compile(`^module\s+(.+)$`)
|
||||||
|
if err != nil {
|
||||||
|
beeLogger.Log.Fatalf("generate regexp error:%s", err)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
fd, err := os.Open(gomodpath)
|
||||||
|
if err != nil {
|
||||||
|
beeLogger.Log.Fatalf("Error while reading 'go.mod',%s", gomodpath)
|
||||||
|
}
|
||||||
|
reader := bufio.NewReader(fd)
|
||||||
|
for {
|
||||||
|
byteLine, _, er := reader.ReadLine()
|
||||||
|
if er != nil && er != io.EOF {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if er == io.EOF {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
line := string(byteLine)
|
||||||
|
s := re.FindStringSubmatch(line)
|
||||||
|
if len(s) >= 2 {
|
||||||
|
return s[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
beeLogger.Log.Fatalf("Error while parse 'go.mod',%s", gomodpath)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
gopath := os.Getenv("GOPATH")
|
gopath := os.Getenv("GOPATH")
|
||||||
if gopath == "" {
|
if gopath == "" {
|
||||||
beeLogger.Log.Fatal("GOPATH environment variable is not set or empty")
|
beeLogger.Log.Fatal("GOPATH environment variable is not set or empty")
|
||||||
|
|
Loading…
Reference in New Issue