设为首页收藏本站

Erlang中文论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 29052|回复: 1
打印 上一主题 下一主题

erlang服务端打包2

[复制链接]
跳转到指定楼层
楼主
发表于 2018-9-4 18:20:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 茶叶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```

最后,欢迎指出错误

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

沙发
发表于 2018-9-5 22:30:44 | 只看该作者
学习了。    Markdown  格式现在还不技术。   谁有好的见意吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Erldoc.com  

GMT+8, 2024-12-4 01:58 , Processed in 0.359020 second(s), 10 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表