本帖最后由 茶叶feng 于 2018-9-4 19:06 编辑
### 启动目标系统
准备工作都搞定了,现在就是顺水推舟了
```
erl -boot ./simple_cache -config ./sys
```
启动完毕
## 发布镜像打包
之前只是完成了一部分,接下来还有呢
### 创建发布镜像包
废话不说,看命令
```
erl -pa ./simple_cache/ebin -pa ./resource_discovery/ebin
> systools:make_script("simple_cache", []).
ok
> systools:make_tar("simple_cache", [{erts, code:root_dir()}]).
ok
```
例子中,运行时系统(erts)在erlang的 安装目录下,用```code:root_dir()```可以定位,把erts从中复制出来,把erts在内的应用一并打包,这样的发布镜像就能在任何兼容主机上安装和启动了
执行完上面的命令会发现,目录下面有一个```simple_cache.tar.gz```文件,这个不就是我们经常见的```.tar.gz```文件吗?赶紧解压看看?
```
$ mkdir tmp
$ cd tmp
$ tar -xzf ../simple_cache.tar.gz
```
或者打开erlang shell
```
erl_tar:extract("simple_cache.tar.gz", [{cwd, "tmp"}, compressed).
```
解压后目录如下
```
tmp
├── erts-8.3
│ └── bin
│ ├── erl.src
│ ...
├── lib
│ ├── cache-0.1.0
│ │ └── ebin
│ │ ├── cache.app
│ │ └── cache_app.beam
│ ├── kernel-5.2
│ │ └── ebin
│ │ ...
│ ├── mnesia-4.14.3
│ │ └── ebin
│ │ ...
│ ├── resource_discovery-0.1.0
│ │ └── ebin
│ │ ├── resource_discovery.app
│ │ ...
│ ├── sasl-3.0.3
│ │ └── ebin
│ │ ...
│ └── stdlib-3.3
│ └── ebin
│ ...
└── releases
├── 0.1.0
│ ├── simple_cache.rel
│ ├── start.boot
│ └── sys.config
└── simple_cache.rel
```
解压后,安装镜像时,需要将```erts-8.3/bin/erl.src```文件中```%FINAL_ROOTDIR%```替换成目标系统上的真实路径,然后再把```erl.src```的内容复制给```erts-8.3/bin/erl```文件,这个路径是你想要安装的路径,比如我想把它安装的机器它的安装在```C:\Program Files\simple_cache```,那我就把文件内容改成下面那样
```
# ROOTDIR="%FINAL_ROOTDIR%"原来的
ROOTDIR="C:/Program Files/simple_cache"
BINDIR=$ROOTDIR/erts-8.3/bin
EMU=beam
PROGNAME=`echo $0 | sed 's/.*\///'`
export EMU
export ROOTDIR
export BINDIR
export PROGNAME
exec "$BINDIR/erlexec" ${1+"$@"}
```
如果没有改这个路径的话,程序是不能正常运行的
如果你系统中已经安装了erlang,想要用erl的安装路径,你可以试试,反正我试过不行
现在能运行了吗?
能!
在tmp目录下执行
```
erts8.3/bin/erl -sname cache -boot ./release/0.1.0/start -config ./release/0.1.0/sys
```
搞定!
### 增加安装和启动脚本
对于非技术人员来说,打包成上面那样,部署工作还是有点麻烦的难以理解的,所有我们尽量简化,就加入了脚本
在解压后的tmp目录中,创建bin目录,写个shell脚本,自己补补shell吧,反正我也是用到了才去学的,下面是安装脚本```install.sh```
```
#!/bin/sh
ROOT=`pwd`
DIR=./erts-8.3/bin
sed s:%FINAL_ROOTDIR%: $ROOT: $DIR/erl.src > $DIR/erl
```
这个脚本用来替换```erl.src```文件中的```%FINAL_ROOTDIR%```然后输出到```erl```
还有个启动脚本```simple_cache.sh```
```
./erts-8.3/bin/erl \
-sname cache \
-boot ./releases/0.1.0/start \
-config ./releases/0.1.0/sys \
-detached
```
写好了记得加执行权限
最后,把脚本一起打包进发布镜像中,在tmp目录下的erlang shell中
```
erl_tar:create("simple_cache-0.3.0.tar.gz", ["erts-8.3", "lib", "releases", "bin"], [compressed]).
```
也可以用tar命令
```
tar -czf simple_cache-0.3.0.tar.gz bin erts-8.3 lib releases
```
这样一来,部署应用就只有三个步骤
1. 解压部署包```simple_cache-0.3.0.tar.gz```
2. 执行安装脚本```install.sh```
3. 执行运行脚本```simple_cache.sh```
最后,欢迎指出错误
|