打包
打包
通过之前的学习,我们项目已经开发完了,可以部署了。这章节我们学习一下部署的细节。
build 命令
buffalo提供了一个命令build
,这个命令将我们的项目全部打包成一个可执行文件,包括但不仅限于:资产文件,数据库migrations文件,模板文件等。一个文件就能独立的提供服务,是不是很爽。
$ buffalo build
Buffalo version 0.14.10
--> cleaning up target dir
--> running node_modules/.bin/webpack
--> packing .../coke/actions/actions-packr.go
--> running go build -v -o bin/coke -ldflags -X main.version=b5dffda -X main.buildTime="2017-03-20T11:05:23-04:00"
--> cleaning up build
----> cleaning up buffalo_build_main.go
----> cleaning up a
----> cleaning up a/a.go
----> cleaning up a/database.go
----> cleaning up buffalo_build_main.go
----> cleaning up ...coke/actions/actions-packr.go
build完成,我们在项目的bin目录下就可以看到这个可执行文件。
自定义build
我们通过help可以帮助查看build的一些具体选项。
$ buffalo help build
Buffalo version 0.14.10
Builds a Buffalo binary, including bundling of assets (packr & webpack)
Usage:
buffalo build [flags]
Aliases:
build, b, bill
Flags:
-c, --compress compress static files in the binary (default true)
-e, --extract-assets extract the assets and put them in a distinct archive
-h, --help help for build
--ldflags string set any ldflags to be passed to the go build
-o, --output string set the name of the binary (default "bin/coke")
-s, --static build a static binary using --ldflags '-linkmode external -extldflags "-static"' (USE FOR CGO)
-t, --tags string compile with specific build tags
自定义名称和目录
默认情况请build的文件是放在项目的bin目录下。名称是项目的名称。
我们可以通过-o或者-output参数,改变输出的目录及文件名。
$ buffalo build -o bin/cookies
--> cleaning up target dir
--> running node_modules/.bin/webpack
--> packing .../coke/actions/actions-packr.go
--> running go build -v -o bin/cookies -ldflags -X main.version="2017-04-02T08:32:28+02:00" -X main.buildTime="2017-04-02T08:32:28+02:00"
--> cleaning up build
----> cleaning up buffalo_build_main.go
----> cleaning up a
----> cleaning up a/a.go
----> cleaning up a/database.go
----> cleaning up buffalo_build_main.go
----> cleaning up ...coke/actions/actions-packr.go
也可以改变目录
$ # Put the app in my home directory, as "coke"
$ buffalo build -o ~/coke
--> cleaning up target dir
--> running node_modules/.bin/webpack
--> packing .../coke/actions/actions-packr.go
--> running go build -v -o ~/coke -ldflags -X main.version="2017-04-02T08:32:28+02:00" -X main.buildTime="2017-04-02T08:32:28+02:00"
--> cleaning up build
----> cleaning up buffalo_build_main.go
----> cleaning up a
----> cleaning up a/a.go
----> cleaning up a/database.go
----> cleaning up buffalo_build_main.go
----> cleaning up ...coke/actions/actions-packr.go
解压资产文件
上面说了,默认情况下build之后会生成了单一文件,包括了可执行文件和资产文件。但是实际项目过程中,我们可能需要将资产文件通过apache或者nginx这个的服务器代理静态文件。甚至将静态资产文件发布到cdn上。
buffalo提供了一个方法可以解压资产文件,用-e或者-extract-assets。
$ buffalo build -e
--> cleaning up target dir
--> running node_modules/.bin/webpack
--> build assets archive
--> disable self assets handling
--> running go build -v -o bin/coke -ldflags -X main.version="2017-04-02T08:45:58+02:00" -X main.buildTime="2017-04-02T08:45:58+02:00"
--> cleaning up build
----> cleaning up buffalo_build_main.go
----> cleaning up a
----> cleaning up a/a.go
----> cleaning up a/database.go
----> cleaning up buffalo_build_main.go
----> cleaning up ...coke/actions/actions-packr.go
默认情况下解压的资产文件也是在bin目录中。
$ ls -la bin
total 36280
drwxr-xr--@ 4 markbates staff 136B Apr 3 10:10 ./
drwxr-xr-x@ 20 markbates staff 680B Apr 3 10:10 ../
-rwxr-xr-x@ 1 markbates staff 17M Apr 3 10:10 coke*
-rw-r--r--@ 1 markbates staff 691K Apr 3 10:10 coke-assets.zip
我们可以通过-o来指定解压的目录。
可执行文件
运行模式
默认情况下二进制执行文件会运行在开发者模式下。我们可以通过 GO_ENV 环境变量来指定运行模式。
$ GO_ENV=production ./coke
可用的命令
Default
默认运行你的web应用
migrate
migrate 子命令执行数据库迁移。
version
version 子命令可以查看二进制文件生成的版本信息。包括应用的名称,git的commit版本的SHA值,以及时间。
$ ./coke version
coke version 69b6a8b ("2017-04-03T10:19:46-04:00")
task
task 子命令可以执行buffalo项目中定义的task(如果定义了task的话)。
$ ./coke task greet
Hello World!