# bee 工具簡介
bee 工具是一個為了協助快速開發 beego 項目而創建的項目,您可以通過 bee 快速創建項目、實現熱編譯、開發測試以及開發完之后打包發布的一整套從創建、開發到部署的方案。
## bee 工具的安裝
您可以通過如下的方式安裝 bee 工具:
go get github.com/beego/bee
安裝完之后,`bee`可執行文件默認存放在`$GOPATH/bin`里面,所以您需要把`$GOPATH/bin`添加到您的環境變量中,才可以進行下一步。
>>> 如何添加環境變量,請自行搜索
>>> 如果你本機設置了`GOBIN`,那么上面的命令就會安裝到`GOBIN`下,請添加GOBIN到你的環境變量中
## bee 工具命令詳解
我們在命令行輸入 `bee`,可以看到如下的信息:
```
Bee is a tool for managing beego framework.
Usage:
bee command [arguments]
The commands are:
new create an application base on beego framework
run run the app which can hot compile
pack compress an beego project
api create an api application base on beego framework
bale packs non-Go files to Go source files
version show the bee & beego version
generate source code generator
migrate run database migrations
```
### new 命令
`new` 命令是新建一個 Web 項目,我們在命令行下執行 `bee new <項目名>` 就可以創建一個新的項目。但是注意該命令必須在 `$GOPATH/src` 下執行。最后會在 `$GOPATH/src` 相應目錄下生成如下目錄結構的項目:
```
bee new myproject
[INFO] Creating application...
/gopath/src/myproject/
/gopath/src/myproject/conf/
/gopath/src/myproject/controllers/
/gopath/src/myproject/models/
/gopath/src/myproject/static/
/gopath/src/myproject/static/js/
/gopath/src/myproject/static/css/
/gopath/src/myproject/static/img/
/gopath/src/myproject/views/
/gopath/src/myproject/conf/app.conf
/gopath/src/myproject/controllers/default.go
/gopath/src/myproject/views/index.tpl
/gopath/src/myproject/main.go
13-11-25 09:50:39 [SUCC] New application successfully created!
```
```
myproject
├── conf
│?? └── app.conf
├── controllers
│?? └── default.go
├── main.go
├── models
├── routers
│?? └── router.go
├── static
│?? ├── css
│?? ├── img
│?? └── js
├── tests
│?? └── default_test.go
└── views
└── index.tpl
8 directories, 4 files
```
### api 命令
上面的 `new` 命令是用來新建 Web 項目,不過很多用戶使用 beego 來開發 API 應用。所以這個 `api` 命令就是用來創建 API 應用的,執行命令之后如下所示:
```
bee api apiproject
create app folder: /gopath/src/apiproject
create conf: /gopath/src/apiproject/conf
create controllers: /gopath/src/apiproject/controllers
create models: /gopath/src/apiproject/models
create tests: /gopath/src/apiproject/tests
create conf app.conf: /gopath/src/apiproject/conf/app.conf
create controllers default.go: /gopath/src/apiproject/controllers/default.go
create tests default.go: /gopath/src/apiproject/tests/default_test.go
create models object.go: /gopath/src/apiproject/models/object.go
create main.go: /gopath/src/apiproject/main.go
```
這個項目的目錄結構如下:
```
apiproject
├── conf
│ └── app.conf
├── controllers
│ └── object.go
│ └── user.go
├── docs
│ └── doc.go
├── main.go
├── models
│ └── object.go
│ └── user.go
├── routers
│ └── router.go
└── tests
└── default_test.go
```
從上面的目錄我們可以看到和 Web 項目相比,少了 static 和 views 目錄,多了一個 test 模塊,用來做單元測試的。
同時,該命令還支持一些自定義參數自動連接數據庫創建相關model和controller:
bee api [appname] [-tables=""] [-driver=mysql] [-conn=root:@tcp(127.0.0.1:3306)/test]
如果conn參數為空則創建一個示例項目,否則將基于鏈接信息鏈接數據庫創建項目。
### run 命令
我們在開發 Go 項目的時候最大的問題是經常需要自己手動去編譯再運行,`bee run` 命令是監控 beego 的項目,通過 [fsnotify](https://github.com/howeyc/fsnotify) 監控文件系統。這樣我們在開發過程中就可以實時的看到項目修改之后的效果:
```
bee run
13-11-25 09:53:04 [INFO] Uses 'myproject' as 'appname'
13-11-25 09:53:04 [INFO] Initializing watcher...
13-11-25 09:53:04 [TRAC] Directory(/gopath/src/myproject/controllers)
13-11-25 09:53:04 [TRAC] Directory(/gopath/src/myproject/models)
13-11-25 09:53:04 [TRAC] Directory(/gopath/src/myproject)
13-11-25 09:53:04 [INFO] Start building...
13-11-25 09:53:16 [SUCC] Build was successful
13-11-25 09:53:16 [INFO] Restarting myproject ...
13-11-25 09:53:16 [INFO] ./myproject is running...
```
我們打開瀏覽器就可以看到效果 `http://localhost:8080/`:

如果我們修改了 `Controller` 下面的 `default.go` 文件,我們就可以看到命令行輸出:
```
13-11-25 10:11:20 [EVEN] "/gopath/src/myproject/controllers/default.go": DELETE|MODIFY
13-11-25 10:11:20 [INFO] Start building...
13-11-25 10:11:20 [SKIP] "/gopath/src/myproject/controllers/default.go": CREATE
13-11-25 10:11:23 [SKIP] "/gopath/src/myproject/controllers/default.go": MODIFY
13-11-25 10:11:23 [SUCC] Build was successful
13-11-25 10:11:23 [INFO] Restarting myproject ...
13-11-25 10:11:23 [INFO] ./myproject is running...
```
刷新瀏覽器我們看到新的修改內容已經輸出。
### test 命令
這是基于 `go test` 進行封裝的一個命令,執行 beego 項目 test 目錄下的測試用例:
```
bee test apiproject
13-11-25 10:46:57 [INFO] Initializing watcher...
13-11-25 10:46:57 [TRAC] Directory(/gopath/src/apiproject/controllers)
13-11-25 10:46:57 [TRAC] Directory(/gopath/src/apiproject/models)
13-11-25 10:46:57 [TRAC] Directory(/gopath/src/apiproject)
13-11-25 10:46:57 [INFO] Start building...
13-11-25 10:46:58 [SUCC] Build was successful
13-11-25 10:46:58 [INFO] Restarting apiproject ...
13-11-25 10:46:58 [INFO] ./apiproject is running...
13-11-25 10:46:58 [INFO] Start testing...
13-11-25 10:46:59 [TRAC] ============== Test Begin ===================
PASS
ok apiproject/tests 0.100s
13-11-25 10:47:00 [TRAC] ============== Test End ===================
13-11-25 10:47:00 [SUCC] Test finish
```
### pack 命令
`pack` 目錄用來發布應用的時候打包,會把項目打包成 zip 包,這樣我們部署的時候直接打包之后的項目上傳,解壓就可以部署了:
```
bee pack
app path: /gopath/src/apiproject
GOOS darwin GOARCH amd64
build apiproject
build success
exclude prefix:
exclude suffix: .go:.DS_Store:.tmp
file write to `/gopath/src/apiproject/apiproject.tar.gz`
```
我們可以看到目錄下有如下的壓縮文件:
```
rwxr-xr-x 1 astaxie staff 8995376 11 25 22:46 apiproject
-rw-r--r-- 1 astaxie staff 2240288 11 25 22:58 apiproject.tar.gz
drwxr-xr-x 3 astaxie staff 102 11 25 22:31 conf
drwxr-xr-x 3 astaxie staff 102 11 25 22:31 controllers
-rw-r--r-- 1 astaxie staff 509 11 25 22:31 main.go
drwxr-xr-x 3 astaxie staff 102 11 25 22:31 models
drwxr-xr-x 3 astaxie staff 102 11 25 22:31 tests
```
### bale 命令
這個命令目前僅限內部使用,具體實現方案未完善,主要用來壓縮所有的靜態文件變成一個變量申明文件,全部編譯到二進制文件里面,用戶發布的時候攜帶靜態文件,包括 js、css、img 和 views。最后在啟動運行時進行非覆蓋式的自解壓。
### version 命令
這個命令是動態獲取bee、beego和Go的版本,這樣一旦用戶出現錯誤,可以通過該命令來查看當前的版本
```
$ bee version
bee :1.2.2
beego :1.4.2
Go :go version go1.3.3 darwin/amd64
```
### generate 命令
這個命令是用來自動化的生成代碼的,包含了從數據庫一鍵生成model,還包含了scaffold的,通過這個命令,讓大家開發代碼不再慢
```
bee generate scaffold [scaffoldname] [-fields=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
The generate scaffold command will do a number of things for you.
-fields: a list of table fields. Format: field:type, ...
-driver: [mysql | postgres | sqlite], the default is mysql
-conn: the connection string used by the driver, the default is root:@tcp(127.0.0.1:3306)/test
example: bee generate scaffold post -fields="title:string,body:text"
bee generate model [modelname] [-fields=""]
generate RESTful model based on fields
-fields: a list of table fields. Format: field:type, ...
bee generate controller [controllerfile]
generate RESTful controllers
bee generate view [viewpath]
generate CRUD view in viewpath
bee generate migration [migrationfile] [-fields=""]
generate migration file for making database schema update
-fields: a list of table fields. Format: field:type, ...
bee generate docs
generate swagger doc file
bee generate test [routerfile]
generate testcase
bee generate appcode [-tables=""] [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"] [-level=3]
generate appcode based on an existing database
-tables: a list of table names separated by ',', default is empty, indicating all tables
-driver: [mysql | postgres | sqlite], the default is mysql
-conn: the connection string used by the driver.
default for mysql: root:@tcp(127.0.0.1:3306)/test
default for postgres: postgres://postgres:postgres@127.0.0.1:5432/postgres
-level: [1 | 2 | 3], 1 = models; 2 = models,controllers; 3 = models,controllers,router
```
### migrate 命令
這個命令是應用的數據庫遷移命令,主要是用來每次應用升級,降級的SQL管理。
```
bee migrate [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
run all outstanding migrations
-driver: [mysql | postgresql | sqlite], the default is mysql
-conn: the connection string used by the driver, the default is root:@tcp(127.0.0.1:3306)/test
bee migrate rollback [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
rollback the last migration operation
-driver: [mysql | postgresql | sqlite], the default is mysql
-conn: the connection string used by the driver, the default is root:@tcp(127.0.0.1:3306)/test
bee migrate reset [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
rollback all migrations
-driver: [mysql | postgresql | sqlite], the default is mysql
-conn: the connection string used by the driver, the default is root:@tcp(127.0.0.1:3306)/test
bee migrate refresh [-driver=mysql] [-conn="root:@tcp(127.0.0.1:3306)/test"]
rollback all migrations and run them all again
-driver: [mysql | postgresql | sqlite], the default is mysql
-conn: the connection string used by the driver, the default is root:@tcp(127.0.0.1:3306)/test
```
## 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": []`:如果您需要在每次啟動時設置臨時環境變量參數,則可以使用該選項。
- 寫在前面的話
- 第0章 beego 簡介
- 0.1 為beego貢獻
- 0.2 發布版本
- 0.3 升級指南
- 第1章 安裝升級
- 1.1 bee工具的使用
- 第2章 快速入門
- 2.1 新建項目
- 2.2 路由設置
- 2.3 Controller運行機制
- 2.4 Model邏輯
- 2.5 View編寫
- 2.6 靜態文件處理
- 第3章 beego的MVC架構
- 3.1 Model設計
- 3.1.1 概述
- 3.1.2 ORM使用
- 3.1.3 CRUD操作
- 3.1.4 高級查詢
- 3.1.5 原生SQL查詢
- 3.1.6 構造查詢
- 3.1.7 事物處理
- 3.1.8 模型定義
- 3.1.9 命令模式
- 3.1.10 測試用例
- 3.1.11 自定義字段
- 3.1.12 FAQ
- 3.2 View設計
- 3.2.1 模板語法指南
- 3.2.2 模板處理
- 3.2.3 模板函數
- 3.2.4 靜態文件處理
- 3.2.5 模板分頁處理
- 3.3 Controller設計
- 3.3.1 參數配置
- 3.3.2 路由設置
- 3.3.3 控制器函數
- 3.3.4 XSRF過濾
- 3.3.5 請求數據處理
- 3.3.6 session 控制
- 3.3.7 過濾器
- 3.3.8 flash 數據
- 3.3.9 URL構建
- 3.3.10 多種格式數據輸出
- 3.3.11 表單數據驗證
- 3.3.12 錯誤處理
- 3.3.13 日志處理
- 第4章 beego的模塊設計
- 4.1 session 模塊
- 4.2 grace 模塊
- 4.3 cache 模塊
- 4.4 logs 模塊
- 4.5 httplib 模塊
- 4.6 context 模塊
- 4.7 toolbox 模塊
- 4.8 config 模塊
- 4.9 i18n 模塊
- 第5章 beego高級編程
- 5.1 進程內監控
- 5.2 API自動化文檔
- 第6章 應用部署
- 6.1 獨立部署
- 6.2 Supervisor部署
- 6.3 Nginx 部署
- 6.4 Apache 部署
- 第7章 第三方庫
- 第8章 應用例子
- 8.1 在線聊天室
- 8.2 短域名服務
- 8.3 Todo列表
- 第9章 FAQ