Bee 工具

bee 工具是一个为了协助快速开发 Beego 项目而创建的项目,通过 bee 你可以很容易的进行 Beego 项目的创建、热编译、开发、测试、和部署。

bee 工具的安装

你可以通过如下的方式安装 bee 工具:

  1. go get -u github.com/beego/bee/v2

安装完之后,bee 可执行文件默认存放在 $GOPATH/bin 里面,所以你需要把 $GOPATH/bin 添加到你的环境变量中,才可以进行下一步。

如果你本机设置了 GOBIN,那么上面的bee命令就会安装到 GOBIN 目录下,所以我们需要在环境变量中添加相关的配置信息,如何添加可以查看这篇文档: bee 环境变量配置

bee 工具命令详解

我们在命令行输入 bee,可以看到如下的信息:

  1. Bee is a Fast and Flexible tool for managing your Beego Web Application.
  2. Usage:
  3. bee command [arguments]
  4. The commands are:
  5. version show the bee & beego version
  6. migrate run database migrations
  7. api create an api application base on beego framework
  8. bale packs non-Go files to Go source files
  9. new create an application base on beego framework
  10. run run the app which can hot compile
  11. pack compress an beego project
  12. fix Fixes your application by making it compatible with newer versions of Beego
  13. dlv Start a debugging session using Delve
  14. dockerize Generates a Dockerfile for your Beego application
  15. generate Source code generator
  16. hprose Creates an RPC application based on Hprose and Beego frameworks
  17. pack Compresses a Beego application into a single file
  18. rs Run customized scripts
  19. run Run the application by starting a local development server
  20. server serving static content over HTTP on port
  21. Use bee help [command] for more information about a command.

new 命令

new 命令是新建一个 Web 项目,我们在命令行下执行 bee new <项目名> 就可以创建一个新的项目。但是注意该命令必须在 $GOPATH/src 下执行。最后会在 $GOPATH/src 相应目录下生成如下目录结构的项目:

  1. bee new myproject
  2. [INFO] Creating application...
  3. /gopath/src/myproject/
  4. /gopath/src/myproject/conf/
  5. /gopath/src/myproject/controllers/
  6. /gopath/src/myproject/models/
  7. /gopath/src/myproject/static/
  8. /gopath/src/myproject/static/js/
  9. /gopath/src/myproject/static/css/
  10. /gopath/src/myproject/static/img/
  11. /gopath/src/myproject/views/
  12. /gopath/src/myproject/conf/app.conf
  13. /gopath/src/myproject/controllers/default.go
  14. /gopath/src/myproject/views/index.tpl
  15. /gopath/src/myproject/main.go
  16. 13-11-25 09:50:39 [SUCC] New application successfully created!
  1. myproject
  2. ├── conf
  3. └── app.conf
  4. ├── controllers
  5. └── default.go
  6. ├── main.go
  7. ├── models
  8. ├── routers
  9. └── router.go
  10. ├── static
  11. ├── css
  12. ├── img
  13. └── js
  14. ├── tests
  15. └── default_test.go
  16. └── views
  17. └── index.tpl
  18. 8 directories, 4 files

api 命令

上面的 new 命令是用来新建 Web 项目,不过很多用户使用 beego 来开发 API 应用。所以这个 api 命令就是用来创建 API 应用的,执行命令之后如下所示:

  1. bee api apiproject
  2. create app folder: /gopath/src/apiproject
  3. create conf: /gopath/src/apiproject/conf
  4. create controllers: /gopath/src/apiproject/controllers
  5. create models: /gopath/src/apiproject/models
  6. create tests: /gopath/src/apiproject/tests
  7. create conf app.conf: /gopath/src/apiproject/conf/app.conf
  8. create controllers default.go: /gopath/src/apiproject/controllers/default.go
  9. create tests default.go: /gopath/src/apiproject/tests/default_test.go
  10. create models object.go: /gopath/src/apiproject/models/object.go
  11. create main.go: /gopath/src/apiproject/main.go

这个项目的目录结构如下:

  1. apiproject
  2. ├── conf
  3. └── app.conf
  4. ├── controllers
  5. └── object.go
  6. └── user.go
  7. ├── docs
  8. └── doc.go
  9. ├── main.go
  10. ├── models
  11. └── object.go
  12. └── user.go
  13. ├── routers
  14. └── router.go
  15. └── tests
  16. └── default_test.go

从上面的目录我们可以看到和 Web 项目相比,少了 static 和 views 目录,多了一个 test 模块,用来做单元测试的。

同时,该命令还支持一些自定义参数自动连接数据库创建相关 model 和 controller: bee api [appname] [-tables=""] [-driver=mysql] [-conn="root:<password>@tcp(127.0.0.1:3306)/test"] 如果 conn 参数为空则创建一个示例项目,否则将基于链接信息链接数据库创建项目。

run 命令

我们在开发 Go 项目的时候最大的问题是经常需要自己手动去编译再运行,bee run 命令是监控 beego 的项目,通过 fsnotify监控文件系统。但是注意该命令必须在 $GOPATH/src/appname 下执行。 这样我们在开发过程中就可以实时的看到项目修改之后的效果:

  1. bee run
  2. 13-11-25 09:53:04 [INFO] Uses 'myproject' as 'appname'
  3. 13-11-25 09:53:04 [INFO] Initializing watcher...
  4. 13-11-25 09:53:04 [TRAC] Directory(/gopath/src/myproject/controllers)
  5. 13-11-25 09:53:04 [TRAC] Directory(/gopath/src/myproject/models)
  6. 13-11-25 09:53:04 [TRAC] Directory(/gopath/src/myproject)
  7. 13-11-25 09:53:04 [INFO] Start building...
  8. 13-11-25 09:53:16 [SUCC] Build was successful
  9. 13-11-25 09:53:16 [INFO] Restarting myproject ...
  10. 13-11-25 09:53:16 [INFO] ./myproject is running...

我们打开浏览器就可以看到效果 http://localhost:8080/:

Bee 工具 - 图1

如果我们修改了 Controller 下面的 default.go 文件,我们就可以看到命令行输出:

  1. 13-11-25 10:11:20 [EVEN] "/gopath/src/myproject/controllers/default.go": DELETE|MODIFY
  2. 13-11-25 10:11:20 [INFO] Start building...
  3. 13-11-25 10:11:20 [SKIP] "/gopath/src/myproject/controllers/default.go": CREATE
  4. 13-11-25 10:11:23 [SKIP] "/gopath/src/myproject/controllers/default.go": MODIFY
  5. 13-11-25 10:11:23 [SUCC] Build was successful
  6. 13-11-25 10:11:23 [INFO] Restarting myproject ...
  7. 13-11-25 10:11:23 [INFO] ./myproject is running...

刷新浏览器我们看到新的修改内容已经输出。

pack 命令

pack 目录用来发布应用的时候打包,会把项目打包成 zip 包,这样我们部署的时候直接把打包之后的项目上传,解压就可以部署了:

  1. bee pack
  2. app path: /gopath/src/apiproject
  3. GOOS darwin GOARCH amd64
  4. build apiproject
  5. build success
  6. exclude prefix:
  7. exclude suffix: .go:.DS_Store:.tmp
  8. file write to `/gopath/src/apiproject/apiproject.tar.gz`

我们可以看到目录下有如下的压缩文件:

  1. rwxr-xr-x 1 astaxie staff 8995376 11 25 22:46 apiproject
  2. -rw-r--r-- 1 astaxie staff 2240288 11 25 22:58 apiproject.tar.gz
  3. drwxr-xr-x 3 astaxie staff 102 11 25 22:31 conf
  4. drwxr-xr-x 3 astaxie staff 102 11 25 22:31 controllers
  5. -rw-r--r-- 1 astaxie staff 509 11 25 22:31 main.go
  6. drwxr-xr-x 3 astaxie staff 102 11 25 22:31 models
  7. drwxr-xr-x 3 astaxie staff 102 11 25 22:31 tests

bale 命令

这个命令目前仅限内部使用,具体实现方案未完善,主要用来压缩所有的静态文件变成一个变量申明文件,全部编译到二进制文件里面,用户发布的时候携带静态文件,包括 js、css、img 和 views。最后在启动运行时进行非覆盖式的自解压。

version 命令

这个命令是动态获取 bee、beego 和 Go 的版本,这样一旦用户出现错误,可以通过该命令来查看当前的版本

  1. $ bee version
  2. bee :1.2.2
  3. beego :1.4.2
  4. Go :go version go1.3.3 darwin/amd64

需要注意的是,目前 bee version 会试图输出当前beego的版本。

但是目前这个实现有点坑,它是通过读取$GOPATH/src/astaxie/beego下的文件来进行的。

这意味着,如果你本地并没有下载beego源码,或者放置的位置不对,bee都无法输出beego的版本信息。

generate 命令

这个命令是用来自动化的生成代码的,包含了从数据库一键生成 model,还包含了 scaffold 的,通过这个命令,让大家开发代码不再慢

generate scaffold

  1. bee generate scaffold [scaffoldname] [-fields=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
  2. The generate scaffold command will do a number of things for you.
  3. -fields: a list of table fields. Format: field:type, ...
  4. -driver: [mysql | postgres | sqlite], the default is mysql
  5. -conn: the connection string used by the driver, the default is root:@tcp(127.0.0.1:3306)/test
  6. example: bee generate scaffold post -fields="title:string,body:text"

generate model

  1. bee generate model [modelname] [-fields=""]
  2. generate RESTful model based on fields
  3. -fields: a list of table fields. Format: field:type, ...

generate controller

  1. bee generate controller [controllerfile]
  2. generate RESTful controllers

generate view

  1. bee generate view [viewpath]
  2. generate CRUD view in viewpath

generate migration

  1. bee generate migration [migrationfile] [-fields=""]
  2. generate migration file for making database schema update
  3. -fields: a list of table fields. Format: field:type, ...

generate docs

  1. bee generate docs
  2. generate swagger doc file

generate routers

generate routers 是从原来beego中剥离出来的功能。在早期,beego的项目必须在启动的时候才会触发生成路由文件。

现在我们把这个东西挪了出来,那么用户可以有更好的控制感。

  1. bee generate routers [-ctrlDir=/path/to/controller/directory] [-routersFile=/path/to/routers/file.go] [-routersPkg=myPackage]
  2. -ctrlDir: the directory contains controllers definition. Bee scans this directory and its subdirectory to generate routers info
  3. -routersFile: output file. All generated routers info will be output into this file.
  4. If file not found, Bee create new one, or Bee truncates it.
  5. The default value is "routers/commentRouters.go"
  6. -routersPkg: package declaration.The default value is "routers".
  7. When you pass routersFile parameter, youd better pass this parameter

generate test

  1. bee generate test [routerfile]
  2. generate testcase

generate appcode

  1. bee generate appcode [-tables=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"] [-level=3]
  2. generate appcode based on an existing database
  3. -tables: a list of table names separated by ',', default is empty, indicating all tables
  4. -driver: [mysql | postgres | sqlite], the default is mysql
  5. -conn: the connection string used by the driver.
  6. default for mysql: root:@tcp(127.0.0.1:3306)/test
  7. default for postgres: postgres://postgres:postgres@127.0.0.1:5432/postgres
  8. -level: [1 | 2 | 3], 1 = models; 2 = models,controllers; 3 = models,controllers,router

generate router

migrate 命令

这个命令是应用的数据库迁移命令,主要是用来每次应用升级,降级的 SQL 管理。

  1. bee migrate [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
  2. run all outstanding migrations
  3. -driver: [mysql | postgresql | sqlite], the default is mysql
  4. -conn: the connection string used by the driver, the default is root:@tcp(127.0.0.1:3306)/test
  5. bee migrate rollback [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
  6. rollback the last migration operation
  7. -driver: [mysql | postgresql | sqlite], the default is mysql
  8. -conn: the connection string used by the driver, the default is root:@tcp(127.0.0.1:3306)/test
  9. bee migrate reset [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
  10. rollback all migrations
  11. -driver: [mysql | postgresql | sqlite], the default is mysql
  12. -conn: the connection string used by the driver, the default is root:@tcp(127.0.0.1:3306)/test
  13. bee migrate refresh [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
  14. rollback all migrations and run them all again
  15. -driver: [mysql | postgresql | sqlite], the default is mysql
  16. -conn: the connection string used by the driver, the default is root:@tcp(127.0.0.1:3306)/test

dockerize 命令

这个命令可以通过生成 Dockerfile 文件来实现 docker 化你的应用。

例子:
生成一个以 1.6.4 版本 Go 环境为基础镜像的 Dockerfile,并暴露 9000 端口:

  1. $ bee dockerize -image="library/golang:1.6.4" -expose=9000
  2. ______
  3. | ___ \
  4. | |_/ / ___ ___
  5. | ___ \ / _ \ / _ \
  6. | |_/ /| __/| __/
  7. \____/ \___| \___| v1.6.2
  8. 2016/12/26 22:34:54 INFO 0001 Generating Dockerfile...
  9. 2016/12/26 22:34:54 SUCCESS 0002 Dockerfile generated.

更多帮助信息可执行bee help dockerize.

bee 工具配置文件

你可能已经注意到,在 bee 工具的源码目录下有一个 bee.json 文件,这个文件是针对 bee 工具的一些行为进行配置。该功能还未完全开发完成,不过其中的一些选项已经可以使用:

  • "version": 0:配置文件版本,用于对比是否发生不兼容的配置格式版本。
  • "go_install": false:如果你的包均使用完整的导入路径(例如:github.com/user/repo/subpkg),则可以启用该选项来进行 go install 操作,加快构建操作。
  • "watch_ext": []:用于监控其它类型的文件(默认只监控后缀为 .go 的文件)。
  • "dir_structure":{}:如果你的目录名与默认的 MVC 架构的不同,则可以使用该选项进行修改。
  • "cmd_args": []:如果你需要在每次启动时加入启动参数,则可以使用该选项。
  • "envs": []:如果你需要在每次启动时设置临时环境变量参数,则可以使用该选项。